From: Skip Montanaro Date: Mon, 20 Aug 2001 20:27:58 +0000 (+0000) Subject: Added new BoundedSemaphore class. Closes bug 452836. X-Git-Tag: v2.2a3~408 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e428bb703010317dc6f87c9a1e709dff8e078535;p=python Added new BoundedSemaphore class. Closes bug 452836. --- diff --git a/Lib/threading.py b/Lib/threading.py index 004ccb66fb..268c09c0f5 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)