我想创建一个非线程安全的代码块进行实验,这些是2个线程将要调用的函数。
c = 0 def increment(): c += 1 def decrement(): c -= 1
此代码线程安全吗?
如果不是,我可以理解为什么它不是线程安全的,以及通常使用哪种语句导致非线程安全的操作。
如果它是线程安全的,如何使它显式地成为非线程安全的?
由于有GIL,单个操作码是线程安全的,但除此之外:
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
*多个线程共享的 *每个 资源都 必须 有一个锁。