assume counter=0; p1程序和p2程序都進行操作counter--,詳細情況就是
p1.register =counter;p1.register = p1.register-1
;counter =p1.register;
p2.register =counter;
p2.register = p2.register -1
;counter = p2.register;
這種順序下是沒問題的。最後counter=-2;
但是cpu執行了p1.register =counter;
p1.register = p1.register-1;
之後可能會跳轉到p2進行繼續執行p2.register =counter; p2.register = p2.register -1;counter = p2.register;
然後跳轉到p1程序,執行counter =p1.register;
最終這種執行順序的結果就是counter=-1;顯然是和我們的預期有差異。
1、互斥進入:如果乙個程序在臨界區中執行,其他程序不允許進入
2、有空讓進:若干程序要求進入空閒臨界區時,應盡快使乙個程序進入臨界區
3、有限等待:從程序發出進入請求到允許進入,不能無限等待
//p0程序
while(turn != 0
);//臨界區
turn=1;//
p1程序
while(trun != 1
);//臨界區
turn=0;
不適合原因: p0執行了之後,p1如果沒執行過,p0就進不去臨界區了,出現死等的情況。
多程序中的程序鎖(互斥鎖)
以下例項中 import threading lock threading.lock num 0def work1 asd global num for i in range asd num 1print 在當前的執行緒修改過後的num是 num defwork2 asd global num fo...
Linux下的程序同步機制 記錄鎖
當可能出現幾個程序爭用 讀 寫 同乙個critical section的時候,加鎖是常用的做法。linux加鎖的方法,除了經典的ipc semophore 之外,記錄鎖 record locking 提供了更簡單的方法。其實記錄鎖的名字叫檔案鎖會比較貼切一點,因為其加鎖和解鎖都是通過對檔案的操作完成...
linux多程序之間的檔案鎖
之前對於檔案的操作通常在乙個程序中完成,最近需要在兩個程序中對同乙個檔案進行操作。故想到了檔案鎖。linux下可以使用flock 函式對檔案進行加鎖解鎖等操作。簡單介紹下flock 函式 表頭檔案 include 定義函式 int flock int fd,int operation 函式說明 fl...