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

