首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >std::this_thread::yield() vs std::this_thread::sleep_for()

std::this_thread::yield() vs std::this_thread::sleep_for()
EN

Stack Overflow用户
提问于 2012-06-15 18:28:07
回答 2查看 24.1K关注 0票数 55

C++11 std::this_thread::yield()std::this_thread::sleep_for()有什么区别?如何决定何时使用哪一个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-15 18:47:02

std::this_thread::yield告诉实现重新调度线程的执行,这应该在处于繁忙等待状态的情况下使用,比如在线程池中:

代码语言:javascript
代码运行次数:0
运行
复制
...
while(true) {
  if(pool.try_get_work()) {
    // do work
  }
  else {
    std::this_thread::yield(); // other threads can push work to the queue now
  }
}

如果你确实想等待一段特定的时间,可以使用std::this_thread::sleep_for。这可以用于任务,在任务中,时间确实很重要,例如:如果你真的只想等待2秒。(请注意,实现等待的时间可能会超过给定的持续时间)

票数 39
EN

Stack Overflow用户

发布于 2012-06-15 18:49:28

std::this_thread::sleep_for()

将使您的线程在给定时间内休眠(线程在给定时间内停止)。(http://en.cppreference.com/w/cpp/thread/sleep_for)

std::this_thread::yield()

将停止当前线程的执行,并将优先级给予其他进程/线程(如果队列中有其他进程/线程在等待)。线程的执行不会停止。(它只是释放CPU)。(http://en.cppreference.com/w/cpp/thread/yield)

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

https://stackoverflow.com/questions/11048946

复制
相关文章

相似问题

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