首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待条件的空循环(busy-waiting)

等待条件的空循环(busy-waiting)
EN

Stack Overflow用户
提问于 2015-01-15 13:16:42
回答 4查看 9.3K关注 0票数 3

在过去的20分钟里,我一直在研究空循环,其目的只是为了等待一个条件成为现实。

我有一个名为"waitForLoaded“的函数,它是由CreateThread创建的线程。

函数:

代码语言:javascript
复制
void waitForLoaded(){
    while(!isLoaded){
        Sleep(500); // < my question
    }
    Sleep(500); //sleep another 500ms to ensure everything is loaded.
    //continue on here
}

我使用睡眠(500)在CPU上很容易,因为我相信使用0或1都会耗尽处理器。

我在许多人的代码中看到过“睡眠(0)”的用法,我从来不明白为什么不是根本不睡觉,而是做“while(Condition){}”。

我找不到任何可靠的答案,所以我问这里的人,忙碌-等待0ms,1ms或500ms和哪个更CPU友好有什么区别。

在我看来,最好是至少进行半睡眠,这几乎不会被用户注意到。

EN

回答 4

Stack Overflow用户

发布于 2015-01-15 13:23:23

在windows上,睡眠(0)不会花费任何时间休眠,但允许操作系统将CPU释放给另一个等待的线程。这有点像是在说:“如果有人在排队,就让他们先走吧,否则我想马上就走。”

票数 7
EN

Stack Overflow用户

发布于 2015-01-15 13:30:56

围绕事件或类似事件的简单同步原语将消耗较少的CPU,并且您的线程有望在最坏的情况下以500ms的等待时间更快地开始工作。

票数 1
EN

Stack Overflow用户

发布于 2015-01-15 13:25:36

如果我理解你的问题,你是在问哪种等待方法更好:

  • sleep(500)
  • sleep(1)
  • sleep(0)
  • // (do nothing)

如果你有时间买一台sleep(500),那么答案是"sleep(500)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27957229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档