【C++】join ()和detach ()函数详解和示例

简单的来说,join ()方法建立的线程具有阻碍作用,该线程不结束,另一些函数就无法运行。detach ()方法建立的线程,可以和另一些函数同时进行。下面以示例进行详细说明,以帮助大家理解和使用。

目录

  • join ()
  • detach ()

join ()

join 方法用于等待线程结束。当一个线程对象调用 join 方法时,当前线程将阻塞,直到该线程对象所代表的线程结束。如果该线程对象所代表的线程已经处于结束状态,则 join 方法立即返回。注意,如果一个线程对象被析构(也就是离开其作用域),而该线程对象所代表的线程仍在运行,程序将终止。

以下是一个 join 的示例:

#include <iostream>
#include <thread>void threadFunction() {std::cout << "Hello from the thread!\n";
}int main() {int i = 3;while (i) {std::thread t(threadFunction);  // 创建一个新线程,t 是该线程的对象t.join();  // 等待新线程结束std::cout << "Hello from the main thread!\n";i--;}return 0;
}

输出:

Hello from the thread!
Hello from the main thread!
Hello from the thread!
Hello from the main thread!
Hello from the thread!
Hello from the main thread!

在这个例子中,先建立一个while()循环,执行三次主程序中内容。程序首先创建一个新线程并开始运行 threadFunction。然后,主线程调用 t.join(),这将阻塞主线程,直到新线程结束。当新线程结束时,主线程将继续执行,输出 “Hello from the main thread!”。
在这里插入图片描述
从输出结果中可以看出,主程序输出和线程输出有着先后顺序,与原理一致。

detach ()

在C++中,std::thread::detach()函数用于将线程“分离”出当前对象。当一个线程对象调用detach()方法时,该线程对象将不再与该线程有任何关联。一旦线程分离出来,它将独立运行,直到完成。注意,一旦线程完成,系统会自动回收其资源。

下面是一个使用std::thread::detach()函数的示例:

#include <iostream>
#include <thread>void threadFunction() {while (1){std::cout << "Hello from the thread!\n";}}int main() {int i = 3;while (i) {std::thread t(threadFunction);  // 创建一个新线程,t 是该线程的对象t.detach();  // 将新线程分离出去,它将继续运行直到完成std::cout << "Hello from the main thread!\n";  // 这会立即输出,不会等待新线程结束i--;}return 0;
}

输出:

Hello from the main thread!
Hello from the main thread!
Hello from the main thread!
Hello from the thread!
Hello from the thread!
Hello from the thread!
Hello from the thread!

在这里插入图片描述

在这个例子中,也是先用一个while循环。从输出的结果可以看出,与join()的有序性不同,建立的线程和主线程是在同时进行的。

需要注意的是,一旦线程被分离出去,它就不再受原线程的控制和影响。因此,无法通过原线程来获取该线程的执行结果或等待其结束。如果需要等待线程执行完毕后再继续执行其他操作,可以使用 join() 方法来阻塞等待线程结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/174981.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 基于SpringBoot的销售项目流程化管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

学开发语言 求职互联网行业的未来发展

我喜欢回答各种各样的问题&#xff0c;自然也喜欢记录下自己的一些观点和看法。希望给朋友们多一点参考&#xff0c;也欢迎交流探讨。 提问&#xff1a; 自考本科&#xff0c;学的开发语言&#xff0c;问互联网行业求职和发展&#xff01; 作为一个资深码农&#xff0c;对这样…

神经网络中的量化与蒸馏

本文将深入研究深度学习中精简模型的技术&#xff1a;量化和蒸馏 深度学习模型&#xff0c;特别是那些具有大量参数的模型&#xff0c;在资源受限环境中的部署几乎是不可能的。所以就出现了两种流行的技术&#xff0c;量化和蒸馏&#xff0c;它们都是可以使模型更加轻量级&…

LeetCode(13)除自身以外数组的乘积【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 238. 除自身以外数组的乘积 1.题目 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素…

新能源充电桩物联网应用之工业4G路由器

新能源充电桩是智慧城市建设中不可缺少且可持续发展的重要设施&#xff0c;而工业4G路由器物联网应用为其提供了更加高效、智能、实时的管理方式。充电桩通过工业4G路由器可以与充电运营商的管理中心建立稳定的连接&#xff0c;实现双向数据传输&#xff0c;为用户提供优质的充…

人工智能基础_机器学习030_ElasticNet弹性网络_弹性回归的使用---人工智能工作笔记0070

然后我们再来看elastic-net弹性网络,之所以叫弹性是因为,他融合了L1和L2正则,可以看到 他的公式 公式中有L1正则和L2正则两个都在这个公式中 可以看到弹性网络,在很多特征互相联系的时候,非常有用,比如, 相关性,如果数学好,那么物理也好,如果语文好,那么英语也好 这种联系 正…

thinkphp6(TP6)访问控制器报404(Nginx)

起因&#xff1a; 安装thinphp6后&#xff0c;发现无法访问控制器&#xff0c;直接通过URL访问&#xff0c;就报错404。 错误原因&#xff1a; Nginx不支持URL的 PathInfo。 解决方法&#xff1a; 配置伪静态。 伪静态代码&#xff1a; location / {if (!-e $request_filen…

5个用于地理空间数据分析的Python包

大家好&#xff0c;地理空间数据分析在城市规划、环境研究、农业和交通等行业中至关重要。不断增长的需求导致Python包在各种地理数据分析要求上的使用增加&#xff0c;例如分析气候模式、研究城市发展或跟踪疾病传播等&#xff0c;评估和选择具有快速处理、修改和可视化能力的…

谈谈一个IT杂家的职业生涯规划,你的护城河被AI 攻破了么

文章大纲 没有顶会的从业者&#xff1a;成为深度学习老中医AIGC 还未能克服的难点&#xff1a;忽然的惊喜 -- 大模型的智能涌现未来还能做点什么&#xff0c;从计算机视觉的发展走向看T 字型人才与护城河成为更加熟练使用人工智能的人 参考文献与学习路径 我的职业生涯将近十年…

Chrome版本对应Selenium版本

1.获得浏览器版本号和驱动 浏览器版本: 119.0.6045.124 浏览器驱动版本: 119.0.6043.1 / 120.0.6051.0 访问 https://vikyd.github.io/download-chromium-history-version/ 2. 安装selenium pip install selenium4.1.1 -i http://pypi.mirrors.ustc.edu.cn/simple/ --trusted…

k8s自定义Endpoint实现内部pod访问外部应用

自定义endpoint实现内部pod访问外部应用 endpoint除了可以暴露pod的IP和端口还可以代理到外部的ip和端口 使用场景 公司业务还还没有完成上云&#xff0c; 一部分云原生的&#xff0c;一部分是实体的 业务上云期间逐步实现上云&#xff0c;保证各个模块之间的解耦性 比如使…

第3章:搜索与图论【AcWing】

文章目录 图的概念图的概念图的分类有向图和无向图 连通性连通块重边和自环稠密图和稀疏图参考资料 图的存储方式邻接表代码 邻接矩阵 DFS全排列问题题目描述思路回溯标记剪枝代码时间复杂度 [N 皇后问题](https://www.luogu.com.cn/problem/P1219)题目描述全排列思路 O ( n ! …