1:
import threading
num = 0 # 非原子操作 資源競爭
l = [] # GIL 原子操作
def work1():
global num
for i in range(1000000):
num += 1
l.append(i) # 一個字節(jié)碼指令
print(num, len(l))
def work2():
global num
for i in range(1000000):
num += 1
l.append(i)
print(num, len(l))
if __name__ == '__main__':
first_threading = threading.Thread(target=work1)
second_threading = threading.Thread(target=work2)
first_threading.start()
# first_threading.join() # 在第二個開始前
second_threading.start()
print("主線程繼續(xù)。。。。。。")
結果:
主線程繼續(xù)。。。。。。
1486523 1917864
1568659 2000000
多線程會出現(xiàn)資源競爭,導致num自加操作不準
GIL全局解釋所,是線程安全,級別字節(jié)碼。對于list的append操作是安全的。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
