Thread.Sleep()在连续循环中的影响

时间:2011-07-26 09:14:32

标签: c# .net multithreading sleep infinite-loop

考虑以下代码:

void MyRunningThread()
{
    while(counter>0) // counter is a Class member that can get modified from external     //threads
    {
         Thread.Sleep(2000);
    }
}

假设我在上面的函数上启动了一个Thread。

现在,在Thread中有一个像这样的永无止境的循环是不是很糟糕? 我添加了Thread.Sleep(),假设由于Sleep而导致上下文切换到此函数的频率会降低,从而减少了此线程的资源消耗。

有人可以验证我的观点。

3 个答案:

答案 0 :(得分:4)

远非最佳,浪费了一个线程。

您应该考虑使用Timer或WaitHandle等。没有更多细节,就不可能精确。

但是,如果其他线程使用lockInterLocked来更改计数器,那么您当前的方法不是灾难性的或任何其他方法。

答案 1 :(得分:2)

尝试使用System.Threading.SpinWait而不是睡眠,本文将介绍如何使用它http://www.emadomara.com/2011/08/spinwait-and-lock-free-code.html

答案 2 :(得分:0)

你能详细说明你的问题吗?为什么你需要在另一个线程中等待?无论如何,如果您需要等到某个计数器变为零,您可以考虑使用CountdownEvent