import threading
x = 0;
class Thread1(threading.Thread):
def run(self):
global x
for i in range(1,100000):
x = x + 1
class Thread2(threading.Thread):
def run(self):
global x
for i in range(1,100000):
x = x - 1
#create two threads
t1 = Thread1()
t2 = Thread2()
#start the threads
t1.start()
t2.start()
#wait for the threads to finish
t1.join()
t2.join()
print x;
多次运行会产生不同的输出,一些是负的,一些是正的。是不是因为两个线程使用的是同一个全局x?我不明白为什么:在一切尘埃落定之后,净效果(输出)不应该是一样的吗?
请您参考如下方法:
不一定。想象一下以下事件序列。我们将在程序运行一段时间后的某个精确时刻开始; Thread1 和 Thread2 都在它们的 for 循环中,并且 x = 0
Thread1拥有控制权。它访问x以确定x + 1的值;x为0,因此结果为1。然而……- 在
Thread1完成分配之前,控制权传递给Thread2。x仍然是0。 Thread2现在访问x。它计算x - 1,即-1,因为x仍然是0。由于线程时间的不可预测性,它设法完成操作,将-1分配给x。- 控制现在返回到
Thread1。它已经计算出x + 1的值为1。它将1分配给x。
两个线程都完成了一次迭代,x的值应该是0,但它的实际值是1。
