多線程都是在同一個進程中運行的。因此在進程中的全局變量所有線程都是可共享的。
這就造成了一個問題,因為線程執行的順序是無序的。有可能會造成數據錯誤。
直白理解:也就是多線程執行的時候,同時對一個全局變量進行操作(例如同時進行賦值操作,並且賦值還不同),就可能出現數據錯誤.
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數據出錯.