python兩種方法解決執行緒衝突問題

2021-10-08 03:31:44 字數 2338 閱讀 3490

本博文源於python基礎炫酷技能,主要講述python的執行緒的問題。大家學到多執行緒的時候只要搞明白兩種東西即可,第一線程通訊,另乙個叫做執行緒衝突。本博文就以一種列印數字的方法**執行緒衝突的解決方案!

實驗效果

實驗**

import _thread

import time

num =

0def

add():

global num

for i in

range

(1000000):

num +=

1print

(num)

for i in

range(5

):add(

)

這裡的**非常直觀和淺顯,大家應該都能理解

實驗效果

實驗**

這裡就呼叫了python的包,結果發現運算元據出現亂序的效果

import _thread

import time

num =

0def

add():

global num

for i in

range

(1000000):

num +=

1print

(num)

for i in

range(5

):_thread.start_new_thread(add,()

)while

true

:pass

實驗效果

實驗**中加上了join函式,join函式就是等待主程式執行完畢後才開始下乙個執行緒的執行,因此可以有序的列印。while true是阻塞程式必備。

import threading

import time

num =

0class

mythread

(threading.thread)

:def

run(self)

:global num

for i in

range

(1000000):

num +=

1print

(num)

for i in

range(5

):t = mythread(

) t.start(

) t.join(

)while

true

:pass

用鎖的時候,一段執行緒訪問時,另乙個執行緒無法訪問。因此這樣也會成功的解決,效果圖跟上面一樣不用多贅述。需要強調的是,整個建立鎖的流程需要大家記憶。

其中建立鎖:mutex = threading.lock()

判斷鎖:if mutex.acquire(1):

解鎖:mutex.release()

import threading

import time

# 執行緒·衝突

# 執行緒·通訊

num =

0mutex = threading.lock(

)class

mythread

(threading.thread)

:def

run(self)

:global num

if mutex.acquire(1)

:for i in

range

(1000000):

num +=

1 mutex.release(

)print

(num)

mythread =

for i in

range(5

):t = mythread(

) t.start(

)for thnum in mythread:

thnum.join(

)print

("over...."

)

以上就是python解決執行緒衝突問題,大家get了嗎?

建立執行緒的兩種方法

有兩種方式 從tread中派生出新的子類 實現runnable介面 還有一種習慣用法 一 從tread中派生出新的子類 建立片段 給執行緒起名 a,並建立 new 型別 執行緒名字 start 完整的建立乙個執行緒,並呼叫 為了給執行緒起名字,建立了域name,並類裡邊建立了構造器 public c...

兩種方法解決約瑟夫問題

第一種 構建迴圈鍊錶,然後不斷遍歷鍊錶直到剩下最後乙個元素。include include include include include include using namespace std typedef struct list list,link int main p next head n...

兩種方法解決排列問題

time limit 1.000 sec memory limit 128 mb problem description 有4個互不相同的數字,請按序輸出由其中三個不重複數字組成的排列。input 4個整數。output 所有排列,輸出順序見樣例。sample input 1 2 3 4 out i...