程序入門之訊號量

2021-06-21 01:00:03 字數 1096 閱讀 5248

下面是乙個簡單的使用訊號量的例子。

#include

#include

using namespace std;

const int max_runnum = 3; //最多執行例項個數

void printinfo()

sleep(10);}}

int main(int argc, char* argv)

ret = waitforsingleobject(hse, 1000);

if (ret == wait_timeout)

printinfo();

releasesemaphore(hse, 1, null);

closehandle(hse);

return 0;

}訊號量,與互斥物件相比,多了乙個計數器。

訊號量 是訊號,具有喚醒和等待機制,並不簡單的是乙個數值狀態標識。

另外,理解waitforsingleobject 和waitformultipleobjects:

waitforsingleobject用於在某個物件(同步事件物件控制代碼、檔案修改控制代碼、程序或執行緒控制代碼等)上阻塞執行緒(此時不占用cpu資源),直到傳遞給它的第乙個引數被設定為訊號點亮狀態時,函式返回。它的第二個引數設定了等待時間,如果設定該引數為infinite,則waitforsingleobject將無限期阻塞執行緒,直到第乙個引數被設定為訊號點亮狀態。但是有時通過將第二個引數設定為0(不等待),並配合waitforsingleobject的返回值(wait_object_0表示物件進入訊號狀態返回,wait_timeout表示超時返回)達到檢測第乙個引數狀態的目的,這可以用於檢測結束執行緒的訊號是否被設定為訊號狀態以結束執行緒。但是值得注意的是,在將waitforsingleobject的第二個引數設定為0來檢查訊號狀態時,若第乙個引數為同步事件物件,則該物件必須為手動事件,這是因為waitforsingleobject每檢查一次自動事件物件就將其重置。waitformultipleobjects在原理上與waitforsingleobject相同,只是可以對多個物件進行監視而已。如果同時有多個核心物件被出發,waitformultipleobjects這個函式返回的只是其中序號最小的那個。

程序通訊之訊號量

1 訊號和訊號量 訊號與訊號量是不同的兩種事物。訊號量是用來調協程序對共享資源的訪問的。為了防止出現因多個程式同時訪問乙個共享資源而引發的一系列問 題,通過生成並使用令牌來授權,在任一時刻只能有乙個執行執行緒訪問 的臨界區域。臨界區域是指執行資料更新的 需要獨佔式地執行,而訊號量就可以提供這樣的一種...

程序通訊之訊號量

一 訊號量 訊號燈 概念 訊號量提供一種訪問機制,讓乙個臨界區同一時間只有乙個程序在訪問他,也就是說訊號量用來協調程序對共享資源的訪問的。訊號量是乙個特殊的變數,程式對其訪問都是原子操作,只允許對他進行等待 p 和傳送資訊 v 的操作。最簡單的訊號量只能取0和1的變數,這也是訊號量最常見的一種形式,...

程序通訊之訊號量

程序通訊之訊號量 一 引言 我們知道在一條單軌鐵路上,任何時候在上面只能有一列列車行駛在上面。而管理這條鐵路的系統就是訊號量,任何一列列車必須等到表明可以行駛的訊號確認以後才能進入鐵路。當一列列車進入軌道行駛時,需要將軌道改為禁止其他列車進入,從而防止不知情的列車進入軌道,發生衝突。而當列車行駛完這...