python 版本的讀寫鎖

2021-06-18 07:15:34 字數 1189 閱讀 1988

最近要用到讀寫鎖的機制,但是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...