On 2023-02-26, Barry Scott <ba...@barrys-emacs.org> wrote: > On 25/02/2023 23:45, Jon Ribbens via Python-list wrote: >> I think it is the case that x += 1 is atomic but foo.x += 1 is not. > > No that is not true, and has never been true. > >:>>> def x(a): >:... a += 1 >:... >:>>> >:>>> dis.dis(x) > 1 0 RESUME 0 > > 2 2 LOAD_FAST 0 (a) > 4 LOAD_CONST 1 (1) > 6 BINARY_OP 13 (+=) > 10 STORE_FAST 0 (a) > 12 LOAD_CONST 0 (None) > 14 RETURN_VALUE >:>>> > > As you can see there are 4 byte code ops executed. > > Python's eval loop can switch to another thread between any of them. > > Its is not true that the GIL provides atomic operations in python.
That's oversimplifying to the point of falsehood (just as the opposite would be too). And: see my other reply in this thread just now - if the GIL isn't making "x += 1" atomic, something else is. -- https://mail.python.org/mailman/listinfo/python-list