Kristján Valur Jónsson <krist...@ccpgames.com> added the comment:

There is no barrier in use on the read part.  I realize that this is a subtle 
point, but in fact, the atomic functions make no memory barrier guarantees 
either (I think).  And even if they did, you are not using a memory barrier 
when you read the 'timeouts' to perform the subtraction.  On a multiprocessor 
machine the two values can easily fall on two cache lines and become visible to 
the other cpu in a random fashion.  In other words:  One cpu decreases the 
"owner" and "timeouts" at about the same time.  A different thread, on a 
different cpu may see the decrease in "owner" but not the decrease in 
"timeouts" until at some random later point.

Lockless algorithms are notoriously hard and it is precisely because of subtle 
pitfalls like these.  I could even be wrong about the above, but that would not 
be blindingly obvious either.  I'm sure you've read something similar but this 
is where I remember seeing some of this stuff mentioned:  
http://msdn.microsoft.com/en-us/library/ee418650(v=vs.85).aspx

----------

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

Reply via email to