本文實例講述了python版本的讀寫鎖定操作方法。分享給大家供大家參考,具體如下:
最近要用到讀寫鎖的機制,但是python2.7的自帶庫裡居然木有.
網上講讀寫鎖的例子眾多,但是原理簡單,代碼明晰的卻不多見, 索性自己寫個.
讀寫鎖一般用於多個讀者,1個或多個寫者同時訪問某種資源的時候。多個讀者之間是可以共享資源的,但是寫者與讀者之間,寫者與寫者之間是資源互斥的。
這也就是說同時可以有多個讀者或一個寫者處於工作狀態。
細分下來,讀寫鎖定可以分為三類,讀者優先,寫者優先和公開策略。
第一種,讀者優先,
目的是保證讀者可以盡可能的不需要等待就獲取資源。
實作的重點,寫者方面比較簡單,只需要一個鎖就能控制是否可寫。
讀者方面,在第一個讀者到來的時候就要阻止寫者,最後一個讀者離開之後再開放寫者。這裡就存在著一個讀者計數器的問題,這個計數器是需要在各讀者之間共享的,所以需要一個額外的鎖來確保該計數器的加減操作的原子性。
實作程式碼:
定義一個類別RWLock,並作簡單的初始化
import threading class RWLock(object): def __init__(self): self.rlock = threading.Lock() self.wlock = threading.Lock() self.reader = 0
寫者鎖定
def write_acquire(self): self.wlock.acquire() def write_release(self): self.wlock.release()
#讀者鎖定
def read_acquire(self): self.rlock.acquire() self.reader += 1 if self.reader == 1: self.wlock.aquire() self.rlock.release() def read_release(self): self.rlock.acquire() self.reader -= 1 if self.reader == 0: self.wlock.release() self.rlock.release()
更多詳解python版本的讀寫鎖定操作方法相關文章請關注PHP中文網!
#