要求:-在任何给定时间点,只有 4 个线程应该调用四个不同的函数。一旦这些线程完成,下一个可用线程应该调用相同的函数。
当前代码:-这似乎是实现此类目标的最糟糕的方法。While(True) 会导致不必要的 CPU 峰值,运行以下代码时我可以看到 CPU 上升到 70%。
问题:-一旦前 4 个工作线程完成处理,我如何使用 AutoResetEventHandler 向主线程 Process() 函数发出信号以再次启动下 4 个线程,而不会浪费 CPU 周期。请建议
public class Demo
{
object protect = new object();
private int counter;
public void Process()
{
int maxthread = 4;
while (true)
{
if (counter <= maxthread)
{
counter++;
Thread t = new Thread(new ThreadStart(DoSomething));
t.Start();
}
}
}
private void DoSomething()
{
try
{
Thread.Sleep(50000); //simulate long running process
}
finally
{
lock (protect)
{
counter--;
}
}
}