Is there a more efficient threading lock?

Jon Ribbens jon+usenet at unequivocal.eu
Sun Feb 26 11:11:11 EST 2023


On 2023年02月26日, Barry Scott <barry at 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.


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /