多程序協同需要的鎖機制記錄

2022-01-28 14:58:12 字數 865 閱讀 5479

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...