同步 訊號量

2021-10-13 13:13:25 字數 1558 閱讀 5305

#include "stdafx.h"

#include#includeusing namespace std;

int number = 1; //定義全域性變數

handle hsemaphore; //定義訊號量控制代碼

unsigned long __stdcall threadproc1(void* lp)

{ long count;

while (number < 100)

{waitforsingleobject(hsemaphore, infinite); //等待訊號量為有訊號狀態

cout << "thread 1 :"《函式原型為:

handle createsemaphore (

psecurity_attribute psa, //訊號量的安全屬性

long linitialcount, //開始時可供使用的資源數

long lmaximumcount, //最大資源數

pctstr pszname);     //訊號量的名稱

建立乙個訊號量

*@param lpsemaphoreattributes 指定安全屬性,如果是null就表示使用預設屬性。

*@param linitialcount 用於指定該訊號量的初始資源計數,必須大於或等於0,並且小於或等於lmaximumcount。

*@param lmaximumcount 指定訊號量的最大資源計數。

*@param lpname 是賦給訊號量的字串名字。

通過呼叫releasesemaphore函式,執行緒就能夠對信標的當前資源數量進行遞增,該函式原型為:

bool winapi releasesemaphore(

handle hsemaphore,   //要增加的訊號量控制代碼

long lreleasecount, //訊號量的當前資源數增加lreleasecount

lplong lppreviouscount  //增加前的數值返回

);

釋放訊號量函式:

*@param hsemaphore 訊號量的控制代碼。

*@param lreleasecount指訊號量現值的增額,該值必須大於0。

*@param lppreviouscount 傳回訊號量原來的計數,可以為null。

和其他核心物件一樣,訊號量也可以通過名字跨程序訪問,開啟訊號量的api為:

handle opensemaphore (

dword fdwaccess,      //access

bool binherithandle,  //如果允許子程序繼承控制代碼,則設為true

pctstr pszname  //指定要開啟的物件的名字

);

根據訊號量的字串名字得到該訊號量的控制代碼:

*@param dwdesiredaccess 訪問方式,同互斥量引數。

*@param binherithandle 繼承特性,同互斥量引數。

*@param lpname 訊號量名字。

執行緒訊號量同步

thread sem.c include include include include define thread number 3 define repeat number 3 define delay time levels 10.0 sem t sem thread number void ...

同步和訊號量

下面介紹用訊號量進行同步。訊號量概念由荷蘭科學家dijkstra首先提出。訊號量是乙個特殊型別的變數,它可以被增加或者減少。但對其的關鍵訪問被保證是原子操作,即使在乙個多執行緒程式中也是如此。訊號量有兩種型別 1 二進位制訊號量。它只有0和1兩種取值。2 計數訊號量。它可以有更大的取值範圍。如果要用...

執行緒同步 訊號量

執行緒同步方法 訊號量不常用,找到個帖子不錯,記錄一下!依賴的標頭檔案 include 函式宣告 sem t 表示訊號量 int sem init sem t sem,int pshared,unsigned int value 名稱 sem init 功能 initialize an unname...