硬體
1.單標記法:
設定乙個標記turn表示謙讓,訪問臨界資源前,檢查是否被謙讓,每次訪問完,將臨界資源謙讓出去:
//檢查
while
(turn==1)
;//訪問
todo
//謙讓
turn=
1;
缺陷:若讓出後,p1不用,則p0永遠不能用。所以只適合p0->p1->p0->p1迴圈。
2.雙標記先檢查法:
雙標記指的是flag[2]表示想訪問,其中flag[0]=1;表示p0想用;flag[1]=1;表示p1想用。
每次先檢查後上鎖。
//檢查
while
(flag[1]
==1);
//上鎖
flag[0]
=1;//訪問
todo
//開鎖
flag[0]
=0;
缺陷:由於檢查和上鎖不能一氣呵成,所以在檢查完之後發生時間片輪轉,容易同時訪問臨界區。
3.雙標記後檢查法:
每次先上鎖後檢查。
//上鎖
flag[0]
=1;//檢查
while
(flag[1]
==1);
//訪問
todo
//開鎖
flag[0]
=0;
缺點:同上,容易造成死鎖。
4.peterson演算法:
綜合單標記法和雙標記法(三個標記),有turn表示謙讓,flag[2]表示想訪問,其中flag[0]=1;表示p0想用;flag[1]=1;表示p1想用。
//表示想用,再表示謙讓
flag[0]
=1;turn=1;
//檢查
while
(flag[1]
==1&&turn=1)
;//他想用,且我謙讓了
//訪問
todo
//表示不想用
flag[0]
=0;
缺點:沒有實現讓權等待。
軟體testandset
將檢查和上鎖一氣呵成,bolck表示上鎖。
testandset
(bool &lock)
//檢查和上鎖一氣呵成
//先檢查,後上鎖
while
(testandset
(bool &lock)
==true);
//訪問
todo
//開鎖
lock=
false;
缺點:沒有實現讓權等待。
訊號量6.整形訊號量
用整形數s表示資源數。(先檢查後上鎖)
wait(s
)signal(s
)
缺點:沒有實現讓權等待。
8.記錄型訊號量
記錄可以將程序掛起,實現讓權等待。(先上鎖後檢查)
typedef structsemaphore;
//訊號量
p(semaphore s)v
(semaphore s
)
同步互斥:
同步先v後p;互斥先p後v。
作業系統程序互斥演算法
程序互斥原則模板 1 互斥性 列舉所有情況,乙個程序進入臨界區後,另乙個程序不能進入臨界區 2 進展性 列舉乙個程序要求進入臨界區後,能夠進入臨界區和多個程序要求進入臨界區後,能有乙個進入臨界區 3 有限等待性 乙個程序離開臨界區後,不會讓該程序再度進入臨界區,而是讓其他程序也能夠進入臨界區 int...
七種排序演算法
排序方法 平均情況 最好情況 最壞情況 輔助空間 穩定性插入排序 o n 2 o n o n 2 o 1 穩定希爾排序 o n log n o n 2 o n 1.3 o n 2 o 1 不穩定選擇排序 o n 2 o n 2 o n 2 o 1 不穩定氣泡排序 o n 2 o n o n 2 o ...
陣列的七種演算法
integer arr for int i 0 imax system.out.println max boolean flag false int findscore 5 for int i 0 i倒置的意思就是最後乙個元素變成第乙個元素第乙個元素變成最後乙個 過程就是折中取半 不遍歷整個陣列了遍...