风起漂泊 发表于 2015-4-22 07:47:34

Python recipe(16):ReadWriteLock

  代码何在?


Example Source Code
'''
Created on 2010-5-28
@author: lk
'''
import threading
class ReadWriteLock:
def __init__(self):
self._read_ready = threading.Condition()
self._readers = 0
def acquire_read(self):
self._read_ready.acquire()
try:
self._readers+=1
finally:
self._read_ready.release()
def release_read(self):
self._read_ready.acquire()
try:
self._readers-=1
if not self._readers:
self._read_ready.notifyAll()
finally:
self._read_ready.release()
def acquire_write(self):
self._read_ready.acquire()
while self._readers:
self._read_ready.wait()
def release_write(self):
self._read_ready.release()
if __name__ == '__main__':
pass  
  以上代码改写自Python Cookbook 6-4
  概述:
  不必多说,用Python实现的读写锁(ReadWriteLock):允许同时多个reader,但只能有一个writer,并且writer工作时reader也不能读
  代码说明:
  1.实现方法和其他语言没有太大区别,这里threading模块是python实现的高级多线程模块(相对low-level的thread模块而言)
  2.python中的condition信号量对象其实还被委托了lock的一些列操作,如acquire和release等,比较方便
页: [1]
查看完整版本: Python recipe(16):ReadWriteLock