This is an example only. On Mar 15, 2012 1:46 AM, "Andrew Svetlov" <andrew.svetlov@gmail.com> wrote:
You still can get race condition:
if b.add(a): # some thread removes a from b before do_c call... do_c()
Explicit lock is still required for your case.
On Wed, Mar 14, 2012 at 10:36 AM, Matt Joiner <anacrolix@gmail.com> wrote:
set.add(x) could return True if x was added to the set, and False if x was already in the set.
Adding an element that is already present often constitutes an error in my code.
As I understand, set.add is an atomic operation. Having set.add return a boolean will also allow EAFP-style code with regard to handling duplicates, the long winded form of which is currently:
if a not in b: b.add(a) <-- race condition do_c()
Which can be improved to:
if b.add(a): do_c()
Advantages: * Very common code pattern. * More concise. * Allows interpreter atomicity to be exploited, often removing the need for additional locking. * Faster because it avoids double contain check, and can avoid locking. _______________________________________________ Python-ideas mailing list Python-ideas@python.org http://mail.python.org/mailman/listinfo/python-ideas