首頁  >  文章  >  後端開發  >  詳解python版本的讀寫鎖定操作方法

詳解python版本的讀寫鎖定操作方法

高洛峰
高洛峰原創
2017-03-06 13:49:532153瀏覽

本文實例講述了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中文網!

#
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn