C 中的訊號量 Semaphore

2022-02-22 18:00:30 字數 1224 閱讀 6715

semaphore是system.threading下的類,限制可同時訪問某一資源或資源池的執行緒數。

常用構造方法

public semaphore(

int initialcount,

int maximumcount

)

引數initialcount

type: system.int32

可以同時授予的訊號量的初始請求數。

maximumcount

type: system.int32

可以同時授予的訊號量的最大請求數。

示例**

class

program

"};thread.start();

}console.readkey();

}static

void

test()

i:");

thread.sleep(

1000

); }

sema.release();

console.readkey();}}

**說明:static semaphore sema = new semaphore(1,1);

宣告乙個訊號量,指示控制的資源初始和最大執行緒併發數為1

sema.waitone();

for (int i = 0; i < 3; i++)

i:");

thread.sleep(1000);

}sema.release();

使用以上兩個方法控制資源,某個執行緒執行sema.waitone()方法時,若有其他執行緒已經占用資源,此方法將阻塞,直到,其他執行緒釋放,即呼叫sema.release();方法

執行效果如下:

同一段時間內,只有乙個執行緒進入共享資源中。

以下是最大併發數為2的執行效果:

static semaphore sema = new semaphore(2,2);

同一段時間內,有兩個執行緒進入了貢獻資源中

訊號量semaphore解析

1 基礎概念 訊號量在建立時須要設定乙個初始值,表示同一時候能夠有幾個任務能夠訪問該訊號量保護的共享資源。初始值為1就變成相互排斥鎖 mutex 即同一時候僅僅能有乙個任務能夠訪問訊號量保護的共享資源。乙個任務要想訪問共享資源,首先必須得到訊號量,獲取訊號量的操作將把訊號量的值減1。若當前訊號量的值...

訊號量的理解Semaphore

訊號量的概念和鎖很像,不過它是一次給你好幾把鎖,這樣就可以實現同時讓 限定個數的程序來獲取某個資源,看下面的 from multiprocessing import process,semaphore import random import time defktv i,sem sem.acquir...

訊號量Semaphore的用法

訊號量和互斥鎖 mutex 的區別 互斥鎖只允許乙個執行緒進入臨界區,而訊號量允許多個執行緒同時進入臨界區。不多做解釋,要使用訊號量同步,需要包含標頭檔案semaphore.h。主要用到的函式 int sem init sem t sem,int pshared,unsigned int value...