summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/threading.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/Lib/threading.py b/Lib/threading.py
index 004ccb6..268c09c 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -284,6 +284,21 @@ class _Semaphore(_Verbose):
self.__cond.release()
+def BoundedSemaphore(*args, **kwargs):
+ return apply(_BoundedSemaphore, args, kwargs)
+
+class _BoundedSemaphore(_Semaphore):
+ """Semaphore that checks that # releases is <= # acquires"""
+ def __init__(self, value=1, verbose=None):
+ _Semaphore.__init__(self, value, verbose)
+ self._initial_value = value
+
+ def release(self):
+ if self._Semaphore__value >= self._initial_value:
+ raise ValueError, "Semaphore released too many times"
+ return _Semaphore.release(self)
+
+
def Event(*args, **kwargs):
return apply(_Event, args, kwargs)