semaphore,是負責協調各個執行緒, 以保證它們能夠正確、合理的使用公共資源。也是作業系統中用於控制程序同步互斥的量。
semaphore常用的方法有兩個waitone()和release(),release()的作用是退出訊號量並返回前乙個計數,而waitone()則是阻止當前執行緒,直到當前執行緒的waithandle 收到訊號。
舉例說明:
waitone()方法就相當於人在等待洗手間位置的行為,而release()方法就相當於乙個人從洗手間出來的行為,這裡再假設x和y都為5,說明開始的時候洗手間有5個空位置,且總共只有5個位置,當一隊超過5個人的隊伍要上洗手間的就排隊,首先waitone()方法等待,發現有空位就依次進去,每進去乙個空位減一,直到進去5之後個沒有空位,這時候後面的人就一直等待,直到進去的人從洗手間出來release()方法,空位加一,在等待waitone()方法的人發現有空位又進去乙個空位減一……如此迴圈往復。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();}}
輸出:
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...