多线程都是在同一个进程中运行的。因此在进程中的全局变量所有线程都是可共享的。
这就造成了一个问题,因为线程执行的顺序是无序的。有可能会造成数据错误。
直白理解:也就是多线程执行的时候,同时对一个全局变量进行操作(例如同时进行赋值操作,并且赋值还不同),就可能出现数据错误.
import threading VALUE = 0 def add_value():
global VALUE # 全局变量在函数体中使用的时候,需要申明
for x in range(1000):
VALUE += 1
print('value: %d' % VALUE) def main():
for x in range(2):
t = threading.Thread(target=add_value)
t.start() if __name__ == '__main__':
main()
两个线程都是对全局变量VALUE进行加1运算,在同一进程中两个线程进行的VALUE加1运算同时执行时就会出错.
在上面程序中VALUE加1执行的次数较少时,出现同时执行的情况一般不会出现,但是,当执行次数较多时(1000000次),
就会出现同时进行VALUE加1运算,从而造成全局变量VALUE数据出错.