Is the += operator thread-safe in Python?

后端 未结 8 1491
萌比男神i
萌比男神i 2020-11-27 13:45

I want to create a non-thread-safe chunk of code for experimentation, and those are the functions that 2 threads are going to call.

c = 0

def increment():
          


        
8条回答
  •  有刺的猬
    2020-11-27 14:20

    Single opcodes are thread-safe because of the GIL but nothing else:

    import time
    class something(object):
        def __init__(self,c):
            self.c=c
        def inc(self):
            new = self.c+1 
            # if the thread is interrupted by another inc() call its result is wrong
            time.sleep(0.001) # sleep makes the os continue another thread
            self.c = new
    
    
    x = something(0)
    import threading
    
    for _ in range(10000):
        threading.Thread(target=x.inc).start()
    
    print x.c # ~900 here, instead of 10000
    

    Every resource shared by multiple threads must have a lock.

提交回复
热议问题