我有多個線程(運行在IIS上的C#應用程序)運行,都需要與同一個MQ後端進行通信。爲了最大限度地減少網絡流量,我只需要在需要完成工作時發送後端請求。將有一個線程來監視是否有工作要完成,並且需要通知其他線程他們也應該開始處理。目前的解決方案涉及的監視線程設置全局變量,並具有其他線程循環和檢查,即在監視線程:當有工作要做時掛起並通知線程
CheckIfWorkAvailable() {
while(true) {
if (queue.Empty != true) {
workToBeDone = true;
}
}//end while loop
}
,然後在工作線程:
DoWork() {
while(true) {
if (workToBeDone == true) {
//do work...
}
else {
Thread.Sleep(x seconds)
}
}//end while loop
}
燦監控線程在工作時通知工作線程,而不是讓他們只是循環和休眠?工作線程還設置了一個計數器,指示它們正在工作,並在工作完成時遞減,以便workToBeDone標誌可以設置爲false。
我只是想說同樣的話。我們在前面寫過的代碼中使用了AutoResetEvent進行類似的線程同步 – 2008-10-16 20:01:46