多线程共享全局变量的问题:

多线程都是在同一个进程中运行的,因此在这个进程中的全局变量在所有的线程都是共享的,这就造成一个问题,线程执行的顺序是无序的(要看代码执行的速度),有可能造成错误。

错误如下:

这样看好像是没有问题,但是如果把add_value函数中的次数从1000加到1000000之后就会有问题

理论来说两个值应该是1000000和2000000才对。

产生这种问题的原因:

在多线程同时操作的时候,有可能会发生线程1拿到的VALUE=0,然后做了+1操作之后,线程2也拿到了VALUE=0的情况,然后还是做+1操作,加了2次之后发现VLAUE=1而不是2,导致数据不准确的情况

解决多线程共享变量问题:

原理很简单:在获取到VALUE的时候给全局变量上锁,让另一个线程进行等待,知道先来的进程操作结束为止,可以通过threading中的Lock函数进行上锁

注意:锁只需要在修改全局变量的时候加锁,访问全局变量就不需要