一、共享变量
共享变量:当多个线程访问同一个变量的时候。会产生共享变量的问题。
例子:
import threading
sum = 0
loopSum = 1000000
def myAdd():
global sum, loopSum
for i in range(1, loopSum):
sum += 1
def myMinu():
global sum, loopSum
for i in range(1, loopSum):
sum -= 1
if __name__ == "__main__":
print("Dont,,,,,,,{0}".format(sum))
t1 = threading.Thread(target = myAdd, args = ())
t2 = threading.Thread(target = myMinu, args = ())
t1.start()
t2.start()
t1.join()
t2.join()
print("Done,,,,,,{0}".format(sum))
正如上面的结果可以看出:并不是我们期望的0,而是-286705,这就是因为我们共享变量了,同时对变量进行了操作,程序并不是原子的。
2.解决方案:使用“锁”,“信号灯”
(1)