C 多執行緒 訊號量 Semaphore

2021-10-01 04:55:41 字數 2243 閱讀 4772

semaphore,是負責協調各個執行緒, 以保證它們能夠正確、合理的使用公共資源。也是作業系統中用於控制程序同步互斥的量。

semaphore常用的方法有兩個waitone()和release(),release()的作用是退出訊號量並返回前乙個計數,而waitone()則是阻止當前執行緒,直到當前執行緒的waithandle 收到訊號。

舉例說明:

class

program

; = string.format("編號", i.tostring());

td.start()

;}console.

readkey()

;}public

static

void

testfun

(object obj)"+

"進洗手間:"

+ datetime.now.

tostring()

);thread.

sleep

(2000);

console.

writeline

($""

+"出洗手間"

+ datetime.now.

tostring()

);sema.

release();}}

waitone()方法就相當於人在等待洗手間位置的行為,而release()方法就相當於乙個人從洗手間出來的行為,這裡再假設x和y都為5,說明開始的時候洗手間有5個空位置,且總共只有5個位置,當一隊超過5個人的隊伍要上洗手間的就排隊,首先waitone()方法等待,發現有空位就依次進去,每進去乙個空位減一,直到進去5之後個沒有空位,這時候後面的人就一直等待,直到進去的人從洗手間出來release()方法,空位加一,在等待waitone()方法的人發現有空位又進去乙個空位減一……如此迴圈往復。

輸出:

semaphore sema = new semaphore(x,y)

有一隊人排隊上洗手間,人就相當於執行緒,x為還剩餘的位置數量,y為總的位置數量。(若x=0,sema.waitone()不會執行後面的**,需要使用sema .release(3),才能執行)

如下:

class

多執行緒 訊號量

訊號量 semaphore類 建立帶指定許可數的訊號量 semaphore semaphore new semaphore 1 建立乙個許可的訊號量 訊號量用來限制訪問共享數資源的執行緒數。在訪問資源之前,執行緒必須從訊號量獲取許可,在訪問完資源後釋放訊號量。任務通過呼叫訊號量的acquire 方法...

C多執行緒程式設計 訊號量

這是對由sem指定的訊號量進行初始化,設定好它的共享選項 linux 只支援為0,即表示它是當前程序的區域性訊號量 然後給它乙個初始值value。int sem init sem t sem int pshared,unsigned int value 給訊號量減1,然後等待直到訊號量的值大於0。i...

多執行緒通訊 訊號量

當當前資源的數量大於0的時候,等待訊號量的執行緒可以獲得乙個資源並繼續執行,訊號量的當前資源數量將減1,如果當前資源的數量為0,則等待訊號量的執行緒將處於等待狀態,直到有執行緒釋放訊號量,使訊號量標識的資源數量大於0 handle createsemaphore lpsecurity attribu...