C 使用Semaphore(訊號量)控制多執行緒

2021-08-10 18:45:26 字數 787 閱讀 4799

在c#.net中,當需要動態控制線程的數量時,我們可以使用semaphore來控制最大執行緒數。

class

program

thread

.sleep

(1000

);console

.writeline

("main方法結束"

);//授予5個請求

semaphore

.release(5

);console

.readline

();}

static

void

work

(object

obj)",

obj);

semaphore

.release

();}

}

執行結果如下:

new semaphore(0, 5);建構函式第乙個引數,表示我們還可使用的授權數。 第二個引數表示我們最大可申請的授權數。

當授權數用完時,則會造成執行緒阻塞直到可申請到semaphore的授權。所以如上**我一開始初始化了0個授權數,所以沒有授權則會被阻塞。

main方法快執行完時,我使用**semaphore.release(5);授權了5個請求。 這時還阻塞在semaphore.waitone();的**得到授權則開始繼續往下執行,列印出print:

訊號量semaphore解析

1 基礎概念 訊號量在建立時須要設定乙個初始值,表示同一時候能夠有幾個任務能夠訪問該訊號量保護的共享資源。初始值為1就變成相互排斥鎖 mutex 即同一時候僅僅能有乙個任務能夠訪問訊號量保護的共享資源。乙個任務要想訪問共享資源,首先必須得到訊號量,獲取訊號量的操作將把訊號量的值減1。若當前訊號量的值...

C 多執行緒 訊號量 Semaphore

semaphore,是負責協調各個執行緒,以保證它們能夠正確 合理的使用公共資源。也是作業系統中用於控制程序同步互斥的量。semaphore常用的方法有兩個waitone 和release release 的作用是退出訊號量並返回前乙個計數,而waitone 則是阻止當前執行緒,直到當前執行緒的wa...

C 執行緒同步 訊號量 Semaphore

semaphore 訊號量,用來限制可同時訪問某一資源或資源池的執行緒數。訊號量維護了乙個計數器,計數器的值可以在0到指定的最大值之間。當乙個執行緒完成了對訊號量的等待後,訊號量計數器值減少。當乙個執行緒稀放訊號量時,訊號量計數器值增加。當計數器值達到零後,訊號量是 未標誌的 當計數器值大於零時,訊...