]> granicus.if.org Git - python/commitdiff
Added new BoundedSemaphore class. Closes bug 452836.
authorSkip Montanaro <skip@pobox.com>
Mon, 20 Aug 2001 20:27:58 +0000 (20:27 +0000)
committerSkip Montanaro <skip@pobox.com>
Mon, 20 Aug 2001 20:27:58 +0000 (20:27 +0000)
Lib/threading.py

index 004ccb66fba08b6fa2c66baa9f0737ddaf333da3..268c09c0f5338c1883a6488fe7571541750cdcbb 100644 (file)
@@ -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)