python版本的讀寫(xiě)鎖操作方法
本文實(shí)例講述了python版本的讀寫(xiě)鎖操作方法。分享給大家供大家參考,具體如下:
最近要用到讀寫(xiě)鎖的機(jī)制,但是python2.7的自帶庫(kù)里居然木有.
網(wǎng)上講讀寫(xiě)鎖的例子眾多,但是原理簡(jiǎn)單,代碼明晰的卻不多見(jiàn), 索性自己寫(xiě)個(gè).
讀寫(xiě)鎖一般用于多個(gè)讀者,1個(gè)或多個(gè)寫(xiě)者同時(shí)訪(fǎng)問(wèn)某種資源的時(shí)候。多個(gè)讀者之間是可以共享資源的,但是寫(xiě)者與讀者之間,寫(xiě)者與寫(xiě)者之間是資源互斥的。
這也就是說(shuō)同時(shí)可以有多個(gè)讀者或一個(gè)寫(xiě)者處于工作狀態(tài)。
細(xì)分下來(lái),讀寫(xiě)鎖可以分為三類(lèi),讀者優(yōu)先,寫(xiě)者優(yōu)先和公開(kāi)策略。
第一種,讀者優(yōu)先,
目的是保證讀者可以盡可能的不需要等待就獲取資源。
實(shí)現(xiàn)的要點(diǎn),寫(xiě)者方面比較簡(jiǎn)單,只需要一個(gè)鎖就能控制是否可寫(xiě)。
讀者方面,在第一個(gè)讀者到來(lái)的時(shí)候就要阻止寫(xiě)者,最后一個(gè)讀者離開(kāi)之后再開(kāi)放寫(xiě)者。這里就存在一個(gè)讀者計(jì)數(shù)器的問(wèn)題,這個(gè)計(jì)數(shù)器是需要在各讀者之間共享的,所以需要一個(gè)額外的鎖來(lái)確保該計(jì)數(shù)器的加減操作的原子性。
實(shí)現(xiàn)代碼:
定義一個(gè)類(lèi)RWLock,并作簡(jiǎn)單的初始化
import threading class RWLock(object): def __init__(self): self.rlock = threading.Lock() self.wlock = threading.Lock() self.reader = 0
寫(xiě)者鎖
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()
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- 對(duì)Python多線(xiàn)程讀寫(xiě)文件加鎖的實(shí)例詳解
- 用Python實(shí)現(xiàn)讀寫(xiě)鎖的示例代碼
- python3爬蟲(chóng)中多線(xiàn)程進(jìn)行解鎖操作實(shí)例
- Cpython解釋器中的GIL全局解釋器鎖
- 互斥鎖解決 Python 中多線(xiàn)程共享全局變量的問(wèn)題(推薦)
- 淺談python鎖與死鎖問(wèn)題
- python multiprocessing多進(jìn)程變量共享與加鎖的實(shí)現(xiàn)
- Python 共享變量加鎖、釋放詳解
- Python讀寫(xiě)鎖實(shí)現(xiàn)實(shí)現(xiàn)代碼解析
相關(guān)文章
tensorflow基本操作小白快速構(gòu)建線(xiàn)性回歸和分類(lèi)模型
這篇文章主要介紹了tensorflow基本操作,快速構(gòu)建線(xiàn)性回歸和分類(lèi)模型,圖文代碼示例非常詳細(xì),有需要的朋友可以借鑒參考下,希望可以對(duì)大家有所幫助2021-08-08Python使用random模塊實(shí)現(xiàn)擲骰子游戲的示例代碼
這篇文章主要介紹了Python使用random模塊實(shí)現(xiàn)擲骰子游戲的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Django 設(shè)置admin后臺(tái)表和App(應(yīng)用)為中文名的操作方法
這篇文章主要介紹了Django 設(shè)置admin后臺(tái)表和App(應(yīng)用)為中文名的操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Python基于os.environ從windows獲取環(huán)境變量
這篇文章主要介紹了Python基于os.environ從windows獲取環(huán)境變量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06淺談pandas中Dataframe的查詢(xún)方法([], loc, iloc, at, iat, ix)
下面小編就為大家分享一篇淺談pandas中Dataframe的查詢(xún)方法([], loc, iloc, at, iat, ix),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python趣味挑戰(zhàn)之用pygame實(shí)現(xiàn)簡(jiǎn)單的金幣旋轉(zhuǎn)效果
今天教大家怎么用pygame實(shí)現(xiàn)簡(jiǎn)單的金幣旋轉(zhuǎn)效果,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05運(yùn)行python提示no module named sklearn的解決方法
這篇文章主要介紹了運(yùn)行python提示no module named sklearn的解決方法,需要的朋友可以參考下2020-11-11Python turtle畫(huà)圖庫(kù)&&畫(huà)姓名實(shí)例
今天小編就為大家分享一篇Python turtle畫(huà)圖庫(kù)&&畫(huà)姓名實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01PyCharm安裝庫(kù)numpy失敗問(wèn)題的詳細(xì)解決方法
今天使用pycharm編譯python程序時(shí),由于要調(diào)用numpy包,但又未曾安裝numpy,于是就根據(jù)pycharm的提示進(jìn)行安裝,最后竟然提示出錯(cuò),下面這篇文章主要給大家介紹了關(guān)于PyCharm安裝庫(kù)numpy失敗問(wèn)題的詳細(xì)解決方法,需要的朋友可以參考下2022-06-06