使用兩個訊號量實現主線程和執行緒池同步

2022-02-06 14:28:01 字數 1094 閱讀 7631

目前專案裡面有個需求,需要多執行緒運算元據庫,等待資料庫操作完畢之後,主線程才能繼續執行以後的操作。

想了想,最後決定使用兩個訊號量來完成這個需求。

具體需求如下 :

運算元據庫的執行緒最多20個

主線程必須等待所有運算元據庫的執行緒返回後,才能進行下一步操作

具體操作步驟如下:

宣告乙個最大值為20,初始值為20的訊號量s1和乙個最大值為1,初始值為0的訊號量s2,以及乙個任務計數器count。

將需要執行緒池操作的任務數賦給count。 

最後在呼叫執行緒池的迴圈結束之後,呼叫s2的waitone方法。

執行截圖如下:

具體**如下:

using

system;

using

system.threading;

using

system.collections.generic;

public

class

usesemaphore

s2.waitone();

console.writeline(

"mainthread");

console.readkey();

}private

static

void

process(

object

obj)

start

", thread.currentthread.managedthreadid);

thread.sleep(

100);

console.writeline(

"threadpool  stop

", thread.currentthread.managedthreadid);

s1.release();

interlocked.decrement(

refcount);

if(count ==0)}}

訊號量Semaphore實現兩個執行緒的交替執行

其思路 使用訊號量 semaphore 有加有減,控制併發。圖出自上方鏈結。我不理解,兩個都是semapore 1 不可以麼?即使不能確定哪個執行緒先執行,使兩個執行緒交替執行應該是ok的吧。此時,我對semaphore的使用還非常不熟悉。那麼驗證一下我的猜想。實現效果 列印1 100的數值,兩個執...

執行緒之訊號量的使用

1.訊號量常用函式 執行緒訊號量初始化函式 sem init sem t sem,int share,unsigned int value 第二個引數不為0表示訊號量可以在程序間共享否則只能在多執行緒之間共享。執行緒訊號量銷毀函式 sem destroy sem t sem 執行緒訊號量增加函式 s...

使用System V訊號量實現多執行緒互斥

posix thread中提供了非常強大的執行緒互斥機制,如 pthread mutex x pthread cond x 以及semaphore sem wait sem post 等。在同一程序內的多執行緒程式設計非常方便靈活。但對於跨程序的執行緒互斥問題就變得麻煩了。其實主流的linux在核心...