最近要用到讀寫鎖的機制,但是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()
讀寫鎖的實現!
寫程式過程中總免不了用到鎖,雖然大牛們總是推薦無鎖程式設計,但那境界對我來說實在太遠了。專案中的資料資源的訪問,少不了鎖,考慮到都是讀的多,寫的少,於是參考網路,自己實現乙個寫優先的讀寫鎖。windows下的 class rwlock include rwlock.h rwlock rwlock r...
讀寫鎖的特性
summary 分析讀寫鎖的特性,以windows為例。但是其實讀寫鎖最先是linux裡面有的,所以說,下面的分析,適用於linux和windows平台。wiki 1 讀寫鎖 讀寫鎖實際是一種特殊的自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫...
讀寫鎖的特性
分類 多執行緒 windows 2011 11 09 21 01 406人閱讀收藏 舉報thread access testing null windows 資料結構 summary 分析讀寫鎖的特性,以windows為例。但是其實讀寫鎖最先是linux裡面有的,所以說,下面的分析,適用於linux...