一 点睛
C++11提供了一个命名空间this_thread来引用当前线程,该命名空间有4个有用的函数,get_id,yield,sleep_until,sleep_for。
get_id是用来获取线程ID的。
其他3个函数都和时间相关,下面分别进行实战演练。
二 yield让出CPU时间
1 点睛
yield函数:调用该函数的线程放弃执行,回到就绪态。
我们创建10个线程,每个线程中让一个变量从一累加到一百万,谁先完成打印它的编号,以此排名。为了公平起见,创建线程的时候,先不让占用CPU时间,一直到main线程改变全局变量的值,各个线程才一起开始累加。
2 代码
#include <iostream> // std::cout
#include <thread> // std::thread, std::this_thread::yield
#include <atomic> // std::atomic
using namespace std;
atomic<bool> ready(false);
void thfunc(int id)
{
while (!ready) //一直等待,直到main线程中重置全局变量ready
this_thread::yield(); //让出自己的CPU时间片
for (volatile int i = 0; i < 1000000; ++i) //开始累加到一百万
{}
cout << id<<",