首页 > 其他分享 >std::thread方法join与detach

std::thread方法join与detach

时间:2023-11-24 15:25:25浏览次数:39  
标签:std include join thread 线程 detach

1、std::join

  std::joinstd::thread类的成员函数之一,用于等待线程的执行完成。

#include <iostream>
#include <utility>
#include <thread>
#include <chrono>
#include <atomic>
void process(std::string str_info)
{
    for (int i = 0; i < 500; ++i) {
        std::cout << "sub thread " << str_info.c_str() << " executing\n";
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
}

int main()
{
    std::thread tr(process, "子线程");
    tr.join();
    system("pause");
}

   代码中tr.join()调用后,主线程将在执行完子线程任务后继续执行主线程任务,tr.join()将会阻塞主线程。

2、std::detach

  std::detachstd::thread类的成员函数之一,用于将线程分离,使得线程的执行与创建线程的对象无关。

#include <iostream>
#include <utility>
#include <thread>
#include <chrono>
#include <atomic>
void process(std::string str_info)
{
    for (int i = 0; i < 500; ++i) {
        std::cout << "sub thread " << str_info.c_str() << " executing\n";
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
}

int main()
{
    std::thread tr(process, "子线程");
    tr.detach();
    system("pause");
}

   代码中tr.detach()调用后,子线程与主线程进行分离,主线程继续执行,不会等待子线程执行,子线程在后台并行执行。此处需要注意的是在子线程分离后将无法使用std::thread::join函数等待线程执行完成。

3、不调用std::detach与std::join的情况

  两者都不调用的情况下,子线程默认在后台同步执行。

标签:std,include,join,thread,线程,detach
From: https://www.cnblogs.com/missyou0813/p/17853792.html

相关文章

  • C# 实现FULL JOIN 效果
    参考:https://dotnettutorials.net/lesson/full-outer-join-in-linq/思路就是先leftjoin再rightjoin,最后unionnamespaceTest{internalclassProgram{staticvoidMain(string[]args){//创建测试数据varlistA=n......
  • std::function 与 std::bind解决类成员函数作为回调函数的问题
    1、std::functionstd::function是一个模板类,其可对C++可调用的对象进行封装,比如,成员函数、静态函数等;它的基本作用是简化调用的复杂程度,归一化调用方式。std::function<int(int,int)>int_function:声明方式为<返回值类型(参数类型1,参数类型2,...)>,其可封装任何可调用的......
  • C++ lambda 内 std::move 失效问题的思考
    最近在学习C++Move时,有看到这样一个代码需求:在lambda中,将一个捕获参数move给另外一个变量。看似一个很简单常规的操作,然而这个move动作却没有生效。具体代码如下std::vector<int>vec={1,2,3};autofunc=[=](){autovec2=std::move(vec);std::cout......
  • Joint Autoregressive and Hierarchical Priors for Learned Image Compression
    abstruct最近的图像压缩模型基于自编码器,学习近似可逆的映射(从像素到量化的可逆表示),这些与熵模型(潜在表示的先验)结合,可以与标准算术编码算法一起使用产生压缩比特流。与简单的全因子先验相比,分层熵模型可以利用更多潜变量中的结构,从而在保存端到端优化的同时提高压缩性能。众所周......
  • 记录 Linux zstd测试程序
    系统版本[root@localhost~]#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)1.linux命令行环境下如何从github上获取源代码直接gitclone项目的github地址(http开头),如gitclone https://github.com/facebook/zstd.git 2.Linux安装cmake3.......
  • systemverilog中fork..join, join_any, join_none的用法和解析
    对fork..join,join_any以及join_none的用法进行总结,以及整理下可能遇到的坑。 简单的说就是:fork..join:必须等到ment1,ment2,ment3全部执行完之后,ment4才可以执行。fork..join_any:等到ment1,ment2,ment3之中任何一个执行完毕之后,ment4才可以执行fork..join_none:ment4的......
  • Maybatis-Plus 数据库查询 lambdaQuery和mapper中EQ、NE、GT、LT、GE、LE、select、li
    Maybatis-PluslambdaQuery和mapper中EQ、NE、GT、LT、GE、LE的用法及详解实体当前实体如下,后续代码示例都用该实体;@Data@TableName("user_info")@ApiModel(value="UserInfo对象",description="")publicclassUserInfoimplementsSerializable{privatesta......
  • left join on后面 加条件 与 where后面加条件的区别
    本文主要讲解leftjoinon和where的区别,以及用法首先数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用leftjoin时,on和where条件的区别如下:1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边......
  • centos7.9 部署FastDFS+Nginx本地搭建文件服务器 高性能的文件服务器集群 同时实现在
    前言FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线......
  • 多线程threading模块(二)daemon和join的区别
    PythonVersion:3.10.12案列一:最简洁的情况,在多线程代码中不开启daemon或join功能。importthreadingimporttimeloop_count=5defcount_num(num):print('子线程<{}>开始运行'.format(num))forxinrange(10):time.sleep(x)print('子线程<{}>结束......