考虑以下代码:
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而导致上下文切换到此函数的频率会降低,从而减少了此线程的资源消耗。
有人可以验证我的观点。
答案 0 :(得分:4)
远非最佳,浪费了一个线程。
您应该考虑使用Timer或WaitHandle等。没有更多细节,就不可能精确。
但是,如果其他线程使用lock
或InterLocked
来更改计数器,那么您当前的方法不是灾难性的或任何其他方法。
答案 1 :(得分:2)
尝试使用System.Threading.SpinWait而不是睡眠,本文将介绍如何使用它http://www.emadomara.com/2011/08/spinwait-and-lock-free-code.html
答案 2 :(得分:0)
你能详细说明你的问题吗?为什么你需要在另一个线程中等待?无论如何,如果您需要等到某个计数器变为零,您可以考虑使用CountdownEvent