在多线程的编程中,有时候一个线程需要等待IO操作或者等待其它某个条件满足,再继续执行。为了达到这样的目的,有时我们会写出如下的代码:
while(!isDone()); // Bad
这样代码的问题在于,这个循环判断的操作会使得这个线程占满CPU的时间,造成资源的浪费。我们可以在一次判断结束后,让线程主动让出自己对CPU的使用权,让操作系统调度另一线程继续执行,过一会再回来判断操作是否完成,这样使得该线程的CPU占用时间大大减少。
while(!isDone()) yield(); // Good
1. std::this_thread::yield
C++ 11中提供了yield函数帮助我们实现让出CPU占用的目的。
void yield() noexcept;
示例代码如下:
#include
#include
#include
// "busy sleep" while suggesting that other threads run
// for a small amount of time
void little_sleep(std::chrono::microseconds us)
{
auto start = std::chrono::high_resolution_clock::now();
auto end = start + us;
do {
std::this_thread::yield();
} while (std::chrono::high_resolution_clock::now()