New submission from Raymond Hettinger:

I was working through the problem sets in The Little Book of Semaphores 
(http://www.greenteapress.com/semaphores/downey08semaphores.pdf) and ran into 
an issue because Python's threading.Semaphore has an unnecessary restriction 
against having negative values.

That precludes use cases such as simple barriers (i.e. wait on five signals 
before a wait is released).

Various descriptions of Semaphores allow their counts to be set to arbitrary 
integer values.  Here's one definition:

   1. When you create the semaphore, you can initialize its 
      value to any integer, but after that the only operations 
      you are allowed to perform are increment (increase by one) 
      and decrement (decrease by one). You cannot read the current
      value of the semaphore.
   2. When a thread decrements the semaphore, if the result is negative,
      the thread blocks itself and cannot continue until another 
      thread increments the semaphore.
   3. When a thread increments the semaphore, if there are other 
      threads waiting, one of the waiting threads gets unblocked.

The patch is simple, remove the guard in the initialization and change the 
value==0 test with value<=0 to trigger blocking.

A bit of demonstration code is attached.

----------
components: Library (Lib)
files: barrier.py
messages: 183642
nosy: rhettinger
priority: normal
severity: normal
status: open
title: Remove restriction against Semaphore having a negative value
type: enhancement
versions: Python 3.4
Added file: http://bugs.python.org/file29334/barrier.py

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue17374>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to