栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++11并发与多线程笔记(2)线程的创建, join(), detach()

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++11并发与多线程笔记(2)线程的创建, join(), detach()

  1. 自己创造的线程,也需要从一个函数开始运行,一旦函数 运行完毕,就代表线程的运行结束;
  2. 主线程执行完毕,就代表整个进程执行完毕了;若此时子线程没执行完毕,则会被系统强行终止,报错;detach()除外

创建 函数

默认构造函数,创建一个空的 std::thread 执行对象。初始化构造函数,创建一个 std::thread 对象,该 std::thread 对象可被 joinable,新产生的线程会调用 fn 函数,该函数的参数由 args 给出。拷贝构造函数(被禁用),意味着 std::thread 对象不可拷贝构造。Move 构造函数,move 构造函数(move 语义是 C++11 新出现的概念,详见附录),调用成功之后 x 不代表任何 std::thread 执行对象。

int main()
{
    int n = 0;
    thread t1; // t1 is not a thread
    thread t2(f1, n + 1); // pass by value, 创建了线程,线程的起点为f1
    thread t3(f2, ref(n)); // pass by reference
    thread t4(move(t3)); // t4 is now running f2(). t3 is no longer a thread

    t2.join();      
    if(t4.joinable())
        t4.join();
    cout << "Final value of n is " << n << 'n';

运行结果示例:

其中

    为什么要写阻塞主线程,子线程执行完毕后,主线程继续往下走    //如果不写join(),则主线程不会处于block状态,仍会继续往下走,主线程执行完毕、子线程仍在执行,会报错
     

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/718245.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号