- import threading
- class ReadWriteLock:
- """A lock object that allows many simultaneous "read-locks", but
- only one "write-lock"."""
- def __init__(self):
- self._read_ready = threading.Condition(threading.Lock())
- self._readers = 0
- def acquire_read(self):
- """Acquire a read-lock. Blocks only if some thread has
- acquired write-lock."""
- self._read_ready.acquire()
- try:
- self._readers += 1
- finally:
- self._read_ready.release()
- def release_read(self):
- """Release a read-lock."""
- 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):
- """Acquire a write lock. Blocks until there are no
- acquired read- or write-locks."""
- self._read_ready.acquire()
- while self._readers > 0:
- self._read_ready.wait()
- def release_write(self):
- """Release a write-lock."""
- self._read_ready.release()
- #该片段来自于http://www.codesnippet.cn/detail/081120136983.html
来源: http://www.codesnippet.cn/detail/081120136983.html