summaryrefslogtreecommitdiffstats
path: root/Doc/library
diff options
context:
space:
mode:
authorGarrett Berg <googberg@gmail.com>2017-12-07 18:04:26 (GMT)
committerAndrew Svetlov <andrew.svetlov@gmail.com>2017-12-07 18:04:26 (GMT)
commita0374dd34aa25f0895195d388b5ceff43b121b00 (patch)
tree3cfd4cd4116c28d44c0ac915af715c5a346f29e0 /Doc/library
parent961dbe0548e26394b7716d41423c61b1e2e58ef7 (diff)
downloadcpython-a0374dd34aa25f0895195d388b5ceff43b121b00.zip
cpython-a0374dd34aa25f0895195d388b5ceff43b121b00.tar.gz
cpython-a0374dd34aa25f0895195d388b5ceff43b121b00.tar.bz2
bpo-32208: update threading.Semaphore docs and add unit test (#4709)
* fix issue32208: update threading.Semaphore docs and add unit test to validate correct behavior * add test for blocking * Update threading.rst * semaphore: remove documentation validation tests and move 'return value' test to BaseSemaphore
Diffstat (limited to 'Doc/library')
-rw-r--r--Doc/library/threading.rst26
1 files changed, 13 insertions, 13 deletions
diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index 95e27ca..b94021b 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -684,8 +684,8 @@ Semaphores also support the :ref:`context management protocol <with-locks>`.
.. class:: Semaphore(value=1)
- This class implements semaphore objects. A semaphore manages a counter
- representing the number of :meth:`release` calls minus the number of
+ This class implements semaphore objects. A semaphore manages an atomic
+ counter representing the number of :meth:`release` calls minus the number of
:meth:`acquire` calls, plus an initial value. The :meth:`acquire` method
blocks if necessary until it can return without making the counter negative.
If not given, *value* defaults to 1.
@@ -701,19 +701,19 @@ Semaphores also support the :ref:`context management protocol <with-locks>`.
Acquire a semaphore.
- When invoked without arguments: if the internal counter is larger than
- zero on entry, decrement it by one and return immediately. If it is zero
- on entry, block, waiting until some other thread has called
- :meth:`~Semaphore.release` to make it larger than zero. This is done
- with proper interlocking so that if multiple :meth:`acquire` calls are
- blocked, :meth:`~Semaphore.release` will wake exactly one of them up.
- The implementation may pick one at random, so the order in which
- blocked threads are awakened should not be relied on. Returns
- true (or blocks indefinitely).
+ When invoked without arguments:
+
+ * If the internal counter is larger than zero on entry, decrement it by
+ one and return true immediately.
+ * If the internal counter is zero on entry, block until awoken by a call to
+ :meth:`~Semaphore.release`. Once awoken (and the counter is greater
+ than 0), decrement the counter by 1 and return true. Exactly one
+ thread will be awoken by each call to :meth:`~Semaphore.release`. The
+ order in which threads are awoken should not be relied on.
When invoked with *blocking* set to false, do not block. If a call
- without an argument would block, return false immediately; otherwise,
- do the same thing as when called without arguments, and return true.
+ without an argument would block, return false immediately; otherwise, do
+ the same thing as when called without arguments, and return true.
When invoked with a *timeout* other than ``None``, it will block for at
most *timeout* seconds. If acquire does not complete successfully in