From e428bb703010317dc6f87c9a1e709dff8e078535 Mon Sep 17 00:00:00 2001 From: Skip Montanaro Date: Mon, 20 Aug 2001 20:27:58 +0000 Subject: [PATCH] Added new BoundedSemaphore class. Closes bug 452836. --- Lib/threading.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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) -- 2.40.0