[Python-Dev] PyFAQ: thread-safe interpreter operations (original) (raw)

"Martin v. Löwis" martin at v.loewis.de
Mon Nov 20 23:55:42 CET 2006


Fredrik Lundh schrieb:

the FAQ contains a list of "atomic" operation, and someone recently asked whether += belongs to this group.

In general, += isn't atomic: it may invoke add or iadd on the left-hand side, or radd on the right-hand side.

From your list, I agree with Josiah Carlson's observation that the examples you give involve separate name lookups (e.g. L.append(x) loads L, then fetches L.append, then loads x, then calls apped, each in a single opcode); the actual operation is atomic.

If you only look at the actual operation, the these aren't atomic:

x.field = y # may invoke setattr, may also be a property D[x] = y # may invoke x.hash, and x.eq

I'm uncertain whether D1.update(D2) will invoke callbacks (it probably will).

Regards, Martin



More information about the Python-Dev mailing list