目前專案裡面有個需求,需要多執行緒運算元據庫,等待資料庫操作完畢之後,主線程才能繼續執行以後的操作。
想了想,最後決定使用兩個訊號量來完成這個需求。
具體需求如下 :運算元據庫的執行緒最多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在核心...