【发布时间】:2008-10-16 19:54:15
【问题描述】:
我有多个线程(在 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。
【问题讨论】:
标签: c# multithreading