程序(同步)鎖

2022-03-22 07:18:06 字數 1040 閱讀 3186

很多時候,我們需要在多個程序中同時寫乙個檔案,如果不加鎖機制,就會導致寫檔案錯亂

這個時候,我們可以使用multiprocessing.lock()

我一開始是這樣使用的:

from multiprocessing import process, lock

#鎖要從從multiprocessing匯入

def f(l, i):#l為鎖,i為傳入的值

l.acquire()#獲得一把鎖

print('hello world', i)

l.release()#釋放鎖

if __name__ == '__main__':

lock = lock()#生成1個鎖的例項

for num in range(10):#建立10個子程序

process(target=f, args=(lock, num)).start()#將鎖傳給子程序

結果:

hello world 1

hello world 3

hello world 2

hello world 5

hello world 0

hello world 6

hello world 9

hello world 7

hello world 4

hello world 8

發現這種方式,鎖並沒有起作用, 檔案內容依然出現了錯亂,所以這種方式,雖然lock通過引數傳到了每個程序中,但是我們知道程序之間是不共享記憶體的,所以我理解應該是每個程序獲得的鎖其實是不同的, 所以無法對寫檔案起到加鎖的效果。以下為程序鎖的用處:

程序鎖-----程序與程序之間是獨立的,為何需要鎖?

對於程序同步,螢幕的輸出只有乙個,此時就涉及到資源的競爭(比如會使上述**結果列印hello world 1還沒列印完,就列印出hello world 3)。在linux的python2.x中可能出現問題。這僅僅是一種情況,多個程序之間雖然是獨立的,但僅限於記憶體和運算,如果涉及到其它一些資源,就可能存在競爭問題,在實際使用過程中要注意思考和防範錯誤。

python程序同步鎖

同步鎖 通常被用來實現共享資源的同步訪問,為每乙個共享資源建立乙個lock物件當你需要訪問該資源時,呼叫qcuqire方法來獲取鎖物件 如果其他執行緒已經獲得該鎖,則當前執行緒需等待期被釋放 待資源訪問完後,在呼叫release方法釋放鎖 死鎖 指倆個或倆個以上的程序或執行緒在執行過程中,因爭奪資源...

Linux程序同步之記錄鎖

記錄鎖相當於執行緒同步中讀寫鎖的一種擴充套件型別,可以用來對有親緣或無親緣關係的程序進行檔案讀與寫的同步 通過fcntl 函式來執行上鎖操作。儘管讀寫鎖也可以通過在共享記憶體區來進行程序的同步,但是 fcntl 記錄上鎖往往更容易使用,且效率更高。記錄鎖的功能 當乙個程序正在讀或修改檔案的某個部分是...

40 多程序同步 鎖 多把鎖

缺點 同步程序,併發沒有了。效率低下。lock 一把鎖 lock.acquire 拿著鎖 通訊證 lock.release 放掉鎖 semaphore 多把鎖,同時提供多把鎖 通行證,保證可以有一定個數的程序保持併發,這個用的多一點 一般情況下我們多程序運算元據庫的時候必須加鎖,這樣才能保證資料的有...