En Tue, 23 Dec 2008 11:30:25 -0200, Duncan Booth <duncan.bo...@invalid.invalid> escribió:

Aaron Brady <castiro...@gmail.com> wrote:

Th.1   Th.2
a=X
       a=Y
a=Z

You are saying that if 'a=Z' interrupts 'a=Y' at the wrong time, the
destructor for 'X' or 'Y' might not get called.  Correct?  In serial
flow, the destructor for X is called, then Y.

No, the destructors will be called, but the destructors can do pretty much
anything they want so you can't say the assignment is atomic. This isn't
actually a threading issue: you don't need multiple threads to experience
werid issues here. If you do strange things in a destructor then you can
come up with confusing code even with a single thread.

A simple example showing what you said:

py> class A:
...   def __del__(self):
...     global a
...     a = None
...
py> a = A()
py> a = 3
py> print a
None

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to