C++11当前线程this_thread实战

一 点睛

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<<",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值