C 多執行緒 限制執行緒數量

2021-10-21 23:25:48 字數 2143 閱讀 3479

這裡需要用到互斥鎖mutex,條件變數condition_variable,通用互斥鎖包裝器unique_lock

std::unique_lock也可以提供自動加鎖、解鎖功能,比std::lock_guard更加靈活。

unique_lock

是通用互斥包裝器,允許延遲鎖定、鎖定的有時限嘗試、遞迴鎖定、所有權轉移和與條件變數一同使用。

unique_lock

比lock_guard

使用更加靈活,功能更加強大。

使用unique_lock

需要付出更多的時間、效能成本。

全域性的互斥鎖m,用於鎖定「process_number」,搭配unique_lock使用。

當乙個執行緒執行完了之後就讓process_number減1,然後喚醒所有等待執行緒

條件變數(condition variable),c++11中提供了#include 標頭檔案,其中的std::condition_variable可以和std::mutex結合一起使用,其中有兩個重要的介面,notify_one()和wait(),

wait()可以讓當前執行緒陷入休眠狀態。(也就是程式停止在wait處不再往下執行)

這裡再condition.wait(lck)外面還要套一層迴圈while(process_number>5)的意思就是,因為同時喚醒了很多執行緒,

while (process_number > 5)
如果沒有這一層迴圈可能會有兩個或者多個執行緒反應快同時啟動,那就不可能限制住執行緒數量了,

因此需要在每個執行緒重啟啟動的時候,都去看看迴圈中的條件是否滿足,再去執行,如果有其他執行緒搶先了,就繼續wait

完整**:

一開始有6個執行緒開始工作,其他執行緒等待。

當id=3的執行緒執行結束了之後,id=9的執行緒開始執行。

這裡要注意的是,再for迴圈中開啟執行緒不可以這樣寫:

for (int i = 0; i < 20; i++)
因為join是子執行緒執行完後主執行緒**子執行緒資源,本來沒啥毛病,但是用在for迴圈中就會導致主線程在for迴圈裡面等著執行緒執行完了**資源,那就等於順序執行,同一時間只執行乙個執行緒(自行測試)

那麼解決方法就是先用乙個vector把執行緒先裝起來,等for迴圈結束以後再統一**資源。

vectorth_set;

for(int i = 0; i < 20; i++)

python多執行緒限制併發數示例

coding utf 8 usr bin env python import queue import threading import time prolock threading.lock 定義同時佇列數 queue queue.queue maxsize 10 定義任務初值值及最大值 task...

python多執行緒限制併發數示例

coding utf 8 usr bin env python import queue import threading import time prolock threading.lock 定義同時佇列數 queue queue.queue maxsize 10 定義任務初值值及最大值 task...

執行緒,限制的非同步操作

非同步的計算限制操作要用其他執行緒執行,比如拼寫檢查,語法檢查,音訊轉碼等,為了設計和實現可伸縮性的 響應靈敏和可靠的應用程式和元件,執行緒池在多個cpu核心上排程任務,使多個執行緒能併發工作,從而高效率地使用系統資源,同時提公升應用程式的吞吐能力。理解腦圖中線程的非同步操作能力,不外乎與計算機處於...