std::thread使用

这篇具有很好参考价值的文章主要介绍了std::thread使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

join & detach

定义区别:

  • join 会阻塞,调用线程等待子线程执行完毕,然后再往下执行
  • detach 分离,调用线程不再等待子线程结束,执行 detach 后,子线程和调用线程失去关联,驻留在后台,由 C++ 运行时库接管

使用方式区别:

  • join 需要注意代码逻辑调用顺序,在需要阻塞等待的地方执行
  • detach 只要在构造之后都可以

joinable() 函数

joinable : 代表该线程是可执行线程。

not-joinable :通常一下几种情况会导致线程成为not-joinable

 1) 由thread的缺省构造函数构造而成(thread()没有参数)。

 2) 该thread被move过(包括move构造和move赋值)

 3) 该线程调用过join或者detac

代码演示

// 文件名为test.cpp
// 编译时需链接thread库,不然会报错 undefined reference to 'pthread_create' 
// g++ -Wall -pthread -g -o test test.cpp

主线程不做操作

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

void functionToThread()
{
  cout << "线程启动......" << endl;

  cout << "1......" <<endl;

  cout << "2......" <<endl;

  cout << "3......" <<endl;

  cout << "4......" <<endl;

  cout << "5......" <<endl;

  cout << "线程结束......" << endl;
}

int main()
{
  thread myThread(&functionToThread);
  cout << "主线程结束......" <<endl;
  return 0;
}

/*
 主线程结束......
 terminate called without an active exception
 已放弃 (核心已转储)
 */

join

#include <thread>
#include <iostream>
using namespace std;
void functionToThread()
{
  cout << "线程启动......" << endl;

  cout << "1......" <<endl;

  cout << "2......" <<endl;

  cout << "3......" <<endl;

  cout << "4......" <<endl;

  cout << "5......" <<endl;

  cout << "线程结束......" << endl;
}

int main()
{

  thread myThread(&functionToThread);
  if( myThread.joinable() )//可联结
  {
      myThread.join();//阻塞等待线程结束
  }

  cout << "主线程结束......" <<endl;
  return 0;
}

 /*
 线程启动......
 1......
 2......
 3......
 4......
 5......
 线程结束......
 主线程结束......
 */

detach

#include <thread>
#include <iostream>
using namespace std;
void functionToThread()
{
  cout << "线程启动......" << endl;

  cout << "1......" <<endl;

  cout << "2......" <<endl;

  cout << "3......" <<endl;

  cout << "4......" <<endl;

  cout << "5......" <<endl;

  cout << "线程结束......" << endl;
}

int main()
{
  thread myThread(&functionToThread);
  if( myThread.joinable() )//可联结
  {
      myThread.detach();//不会等待线程结束
  }

  cout << "主线程结束......" <<endl;
  return 0;
}
/*
 主线程结束......
 */

参考文章:
1、joinable
https://blog.csdn.net/bobbypeng/article/details/100055167
2、join 和 detach
https://blog.csdn.net/lizhichao410/article/details/123572144
3、编译问题
https://blog.csdn.net/qq907482638/article/details/104542871文章来源地址https://www.toymoban.com/news/detail-450725.html

到了这里,关于std::thread使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pytorch:.detach()、.detach_()的作用和区别

    当我们在训练神经网络的时候可能希望保持一部分的网络参数不变,只对其中一部分参数进行调整;或者只训练部分分支网络,并不让其梯度对主网络的梯度造成影响,这时候我们就需要使用detach()函数来切断一些分支的反向传播 一、torch.detach() 返回一个新的tensor,从当前计

    2024年02月03日
    浏览(31)
  • 【webrtc】rtc::Thread和std::thread 的用法

    itsfolf/Discord-Screenshare-Linux

    2024年02月16日
    浏览(34)
  • Linux线程(4)——pthread_detach()自动回收线程资源

    分离线程                 默认情况下,当线程终止时,其它线程可以通过调用 pthread_join()获取其返回状态、回收线程资源,有时,程序员并不关心线程的返回状态,只是希望系统在线程终止时能够自动回收线程资源并将其移除。在这种情况下,可以调用 pthread_detach

    2024年02月03日
    浏览(39)
  • 【C++】详解std::thread

    2023年9月10日,周日下午开始 2023年9月10日,周日晚上23:35完成 虽然这篇博客我今天花了很多时间去写,但是我对std::thread有了一个完整的认识 不过有些内容还没完善,以后有空再更新.... 目录 头文件 类的成员 类型 方法 (constructor) terminate called without an active exception是什么?

    2024年02月09日
    浏览(44)
  • Verilog基础:在testbench中使用阻塞赋值和非阻塞赋值的区别

    相关阅读 Verilog基础 https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482         本文详细阐述了在一个testbench中,应该如何使用阻塞赋值与非阻塞赋值。首先说结论,建议在testbench中,对时钟信号(包括分频时钟)使用阻塞赋值,对其他同步信号使用非阻塞赋值

    2024年04月08日
    浏览(70)
  • 【C++】std::thread的英文资料整理

    2023年9月10日,周日上午 这篇博客是我对网上的英文资料的整理和翻译 英文资料来自: c++ - What exactly is an std::thread? - Stack Overflow When you create a std::thread (assuming you don\\\'t use the default constructor), the constructor will use the operating system API to create a native thread, and calls the passed function. 当你

    2024年02月09日
    浏览(41)
  • 《Linux操作系统编程》 第十章 线程与线程控制: 线程的创建、终止和取消,detach以及线程属性

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月11日
    浏览(89)
  • 【C++】多线程(thread)使用详解

    多线程(multithreading),是指在软件或者硬件上实现多个线程并发执行的技术。具有多核CPU的支持的计算机能够真正在同一时间执行多个程序片段,进而提升程序的处理性能。在一个程序中,这些独立运行的程序片段被称为“ 线程 ”(Thread),利用其编程的概念就叫作“多线

    2024年02月14日
    浏览(41)
  • Java多线程---线程的创建(Thread类的基本使用)

    本文主要介绍Java多线程的相关知识, Thread的创建, 常用方法的介绍和使用, 线程状态等. 文章目录 前言 一. 线程和Thread类 1. 线程和Thread类 1.1 Thread类的构造方法 1.2 启用线程的相关方法 2. 创建第一个Java多线程程序 3. 使用Runnable对象创建线程 4. 使用内部类创建线程 5. 使用Lamba

    2024年02月03日
    浏览(39)
  • C++11并发与多线程笔记(3)线程传参详解,detach()大坑,成员函数做线程函数

    在使用detach时,不推荐引用传递,指针传递肯定有问题 在创建线程的同时构造临时对象的方法传递参数是可行的 如果传递int这种基本数据类型,推荐使用 值传递 ,不要用引用 如果传递 类对象 ,避免使用隐式类型转换,全部都是创建线程这一行就创建出 临时对象 ,然后在

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包