上一篇: 多線程版聊天 | 手把手教你入門Python之一百 下一篇: 線程鎖的使用 | 手把手教你入門Python之一百零二 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。
線程通路全局變量
在一個程序内的所有線程共享全局變量,很友善在多個線程間共享資料。缺點就是,線程是對全局變量随意遂改可能造成多線程之間對全局變量的混亂(即線程非安全)。
import threading
g_num = 0
def test(n):
global g_num
for x in range(n):
g_num += x
g_num -= x
print(g_num)
if __name__ == '__main__':
t1 = threading.Thread(target=test, args=(10,))
t2 = threading.Thread(target=test, args=(10,))
t1.start()
t2.start()
線程安全問題
import threading
import time
# 多個線程可以同時操作一個全局變量(多個線程共享全局變量)
# 線程安全問題
ticket = 20
def sell_ticket():
global ticket
while True: # ticket = 1 線程1:1 線程2: 1
if ticket > 0:
time.sleep(1) # 線程1: ticket=1 線程2:ticket=1
ticket -= 1 # 線程1: ticket = 0 線程2:ticket=-1
print('{}賣出一張票,還剩{}張'.format(threading.current_thread().name, ticket))
else:
print('票賣完了')
break
t1 = threading.Thread(target=sell_ticket, name='線程1')
t2 = threading.Thread(target=sell_ticket, name='線程2')
t1.start()
t2.start()