使用者模式同步之訊號量小解

2022-07-23 08:27:12 字數 586 閱讀 2520

3.訊號燈(重點是記住什麼樣是激發什麼樣稱為未激發)

訊號燈有兩種狀態,激發和未激發狀態,訊號燈內部有個計數器,可以理解訊號燈內部有n個燈泡,如果有乙個燈泡亮著,表示訊號燈處於激發狀態,如果全部熄滅,訊號燈就是處於未激發狀態

同樣的訊號燈的使用也需要初始化它利用的是createsemaphore(security,long(初始化計數個數),long(計數器最大個數)。lpctstr(name))

第二個引數表示在初始化的時候計數器的值為多少,第三個引數為訊號燈的計數器最大值是多少,如果初始值為0則是未激發的狀態,非0則是激發狀態

releasesemaphore(handle,long(本次操作增加的計數),long(以前的計數,傳值即可))

如果對訊號燈執行一次等待操作,就會減少乙個計數,相當於熄滅乙個燈,計數為0,也就是所有燈泡全部熄滅,當前執行緒進入睡眠狀態,直到訊號燈變為激發狀態。

#include "stdafx.h"

#include

void sub_1();

handle __semaphorehandle = null;

int main()

void sub_1()

執行緒同步之訊號量同步

linux中兩種基本的同步方法是訊號量和互斥量。這兩種方法很相似,而且它們可以相互通過對方來實現。現在有個圖書館,其能容納100人,現在有兩個執行緒a b,a執行緒執行 往圖書管理進入乙個人,b執行緒 從圖書館出來乙個人。那麼為了使得執行緒a在圖書館滿人的時候進入等待,而不是繼續往圖書館裡進人,使得...

同步 訊號量

include stdafx.h include includeusing namespace std int number 1 定義全域性變數 handle hsemaphore 定義訊號量控制代碼 unsigned long stdcall threadproc1 void lp long co...

執行緒同步之訊號量

什麼是訊號量 linux sem 訊號量是一種特殊的變數,訪問具有原子性,用於解決程序或執行緒間共享資源引發的同步問題。使用者態程序對 sem 訊號量可以有以下兩種操作 等待訊號量 當訊號量值為 0 時,程式等待 當訊號量值大於 0 時,訊號量減 1,程式繼續執行。傳送訊號量 將訊號量值加 1 通過...