C++ std::thread学习

1.介绍
  std::thread是C++11新加的一个跨平台的一个C++线程库(pthread不跨平台)。很方便地支持了并发编程。

2.特性
2.1 std::thread成员函数没有start函数,创建一个对象就表明启动了start函数

2.2 join函数是等待线程完成其执行,就是要让它的父线程等待该线程执行完结束,父线程再退出结束。如下代码:

#include <iostream>
#include <memory>
#include <string>
#include <thread>
using namespace std;

void func1()
{
    std::cout << "func1" << std::endl;
}

void func2()
{
    std::cout << "func2" << std::endl;
}

int main()
{
    std::thread t1(func1);
    std::thread t2(func2);
    std::cout << "main" << std::endl;
    return 0;
}

是非常有可能抛出异常的代码,因为可能主函数的线程退出了,t1或者t2的线程没有执行完。如下代码就会正确执行了:
图片说明

2.3 detach函数容许线程从线程句柄独立开来执行,即相当于网络游戏断开了网络,在本地单机运行,这个线程对象detach之后就在后台默默运行了,与之父线程无关了。detach之后也不能通过join来让父线程等待线程执行完了,无法控制线程何时执行完。

2.4 创建的线程对象不能拷贝,但是可以通过std::move移动,好像std::unique_ptr也是不能拷贝,可以通过std::move移动。代码如下:
图片说明
会报错,注释掉t1.join()就好了。

2.5 可以通过std::bind或者lambda表达式来创建线程,代码如下:
图片说明

全部评论

相关推荐

九点快去睡:这个岗位 去年暑假我都见了 现在还在找人 钱是一点没涨
点赞 评论 收藏
分享
mq2:我倒是觉得这种敞亮一点好。能接受就去不能就不去呗。 完了跟现在“正常”公司一样,hr说的天花乱坠,进去一看根本就是996核动力牛马,想走又没应届生身份了。岂不是更糟。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务