C++11 std::this_thread::yield()
和std::this_thread::sleep_for()
有什么区别?如何决定何时使用哪一个?
发布于 2012-06-15 10:47:02
std::this_thread::yield
告诉实现重新调度线程的执行,这应该在处于繁忙等待状态的情况下使用,比如在线程池中:
...
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秒。(请注意,实现等待的时间可能会超过给定的持续时间)
发布于 2012-06-15 10: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)
https://stackoverflow.com/questions/11048946
复制