[Python-Dev] Software Transactional Memory for Python (original) (raw)
Charles-François Natali neologix at free.fr
Sat Aug 27 19:11:18 CEST 2011
- Previous message: [Python-Dev] Software Transactional Memory for Python
- Next message: [Python-Dev] Software Transactional Memory for Python
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Armin,
This is basically dangerous, because it corresponds to taking lock "GIL" and lock L, in that order, whereas the thread B takes lock L and plays around with lock "GIL" in the opposite order. I think a reasonable solution to avoid deadlocks is simply not to use explicit locks inside "with atomic" blocks.
The problem is that many locks are actually acquired implicitely.
For example, print
to a buffered stream will acquire the fileobject's mutex.
Also, even if the code inside the "with atomic" block doesn't directly
or indirectely acquire a lock, there's still the possibility of
asynchronous code that acquire locks being executed in the middle of
this block: for example, signal handlers are run on behalf of the main
thread from the main eval loop and in certain other places, and the GC
might kick in at any time.
Generally speaking it can be regarded as wrong to do any action that causes an unbounded wait in a "with atomic" block,
Indeed.
cf
- Previous message: [Python-Dev] Software Transactional Memory for Python
- Next message: [Python-Dev] Software Transactional Memory for Python
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]