From 868d0c6ccdc7f5d7e689d13dacd4a1cf17e6977d Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Sun, 1 Sep 2013 17:29:53 -0700 Subject: [PATCH] Reader/writer no longer used Remove the reader/writer lock as it is no longer used and if it is needed I would rather thing of other ways to do this as getting the reader/writer lock usage incorrect will mean deadlock. Change-Id: I4518c25e65626dc5a77f4e899c258ff9da76fea1 --- taskflow/utils.py | 78 ----------------------------------------------- 1 file changed, 78 deletions(-) diff --git a/taskflow/utils.py b/taskflow/utils.py index 6aa8d6234..06d0a64b8 100644 --- a/taskflow/utils.py +++ b/taskflow/utils.py @@ -18,7 +18,6 @@ # under the License. import collections -import contextlib import copy import inspect import logging @@ -506,80 +505,3 @@ class RollbackAccumulator(object): def __exit__(self, type, value, tb): if any((value, type, tb)): self.rollback(value) - - -class ReaderWriterLock(object): - """A simple reader-writer lock. - - Several readers can hold the lock simultaneously, and only one writer. - Write locks have priority over reads to prevent write starvation. - - Public domain @ http://majid.info/blog/a-reader-writer-lock-for-python/ - """ - - def __init__(self): - self.rwlock = 0 - self.writers_waiting = 0 - self.monitor = threading.Lock() - self.readers_ok = threading.Condition(self.monitor) - self.writers_ok = threading.Condition(self.monitor) - - @contextlib.contextmanager - def acquire(self, read=True): - """Acquire a read or write lock in a context manager.""" - try: - if read: - self.acquire_read() - else: - self.acquire_write() - yield self - finally: - self.release() - - def acquire_read(self): - """Acquire a read lock. - - Several threads can hold this typeof lock. - It is exclusive with write locks. - """ - - self.monitor.acquire() - while self.rwlock < 0 or self.writers_waiting: - self.readers_ok.wait() - self.rwlock += 1 - self.monitor.release() - - def acquire_write(self): - """Acquire a write lock. - - Only one thread can hold this lock, and only when no read locks - are also held. - """ - - self.monitor.acquire() - while self.rwlock != 0: - self.writers_waiting += 1 - self.writers_ok.wait() - self.writers_waiting -= 1 - self.rwlock = -1 - self.monitor.release() - - def release(self): - """Release a lock, whether read or write.""" - - self.monitor.acquire() - if self.rwlock < 0: - self.rwlock = 0 - else: - self.rwlock -= 1 - wake_writers = self.writers_waiting and self.rwlock == 0 - wake_readers = self.writers_waiting == 0 - self.monitor.release() - if wake_writers: - self.writers_ok.acquire() - self.writers_ok.notify() - self.writers_ok.release() - elif wake_readers: - self.readers_ok.acquire() - self.readers_ok.notifyAll() - self.readers_ok.release()