Python day11_線程

## 多線程共享全局變量 但是 因為線程執行是無須的 所以會出現資源競爭的問題 如下所示


這樣會導致得到的數據不符合我們的期望。為了解決資源競爭的問題,線程中有兩個解決辦法:

1. 線程同步,第一個線程執行完畢后,第二個才開始,如上圖25行

2. 利用互斥鎖,如下代碼:

import threading

num = 0

# 創建互斥鎖

lock = threading.Lock()

# 任務1:循環1000000次每循環1次全局變量加1

def sum1():

? ? # 上鎖

? ? lock.acquire()

? ? global num

? ? for i in range(1000000):

? ? ? num += 1

? ? print("sum1:", num)

? ? # 釋放鎖

? ? lock.release()

# 任務2:循環10000000次每循環1次全局變量加1

def sum2():

? ? # 上鎖

? ? lock.acquire()

? ? global num

? ? for i in range(1000000):

? ? ? ? num += 1

? ? print("sum2:", num)

? ? # 釋放鎖

? ? lock.release()

if __name__ == '__main__':

? ? # 創建兩個線程分別執行對應相加任務

? ? first_thread = threading.Thread(target=sum1)

? ? second_thread = threading.Thread(target=sum2)

? ? first_thread.start()

? ? second_thread.start()

? ? # 互斥鎖: 保證同一時刻只有一個線程去執行代碼,其它線程沒有搶到鎖會等待

? ? # 提示:加上互斥鎖,哪個線程搶到鎖我們決定不了,因為,線程執行是無序

? ? # 注意點: 線程同步和加上互斥鎖把多任務瞬間該成單任務,性能會下降

# 注意:加上鎖之后要及時釋放鎖,否則會出現死鎖。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.進程和線程 隊列:1、進程之間的通信: q = multiprocessing.Queue()2、...
    一只寫程序的猿閱讀 1,119評論 0 17
  • 線程 1.同步概念 1.多線程開發可能遇到的問題 同步不是一起的意思,是協同步調 假設兩個線程t1和t2都要對nu...
    TENG書閱讀 620評論 0 1
  • 一文讀懂Python多線程 1、線程和進程 計算機的核心是CPU,它承擔了所有的計算任務。它就像一座工廠,時刻在運...
    星丶雲閱讀 1,466評論 0 4
  • 剛剛讀完莎士比亞的《李爾王》,“經典,外國,戲劇,文學……”豆瓣評分8.4,看到標題就覺得是一本厚重的書,該是放到...
    木子果兒閱讀 239評論 0 3
  • 今天,我早早盼望著能再去一次美麗的大運河森林公園,它實在是太大了,每一次去一個樣,給予我無限遐想啊!這次去大...
    周天時閱讀 844評論 2 5