Linux下主线程 return 0 和 pthread_exit(NULL) 的区别

1. 背景

在Linux环境下,主线程以return 0结束时,程序会在主线程运行完毕后结束。而当主线程以pthread_exit(NULL)作为返回值时,主线程会等待子线程结束后才会退出程序。本文将详细探讨这两种方式的区别,并提供相应的代码示例。

2. 代码示例

2.1 Ubuntu

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>void* task(void* param) {sleep(5);printf("hello\\n");pthread_exit(NULL);
}int main() {pthread_t tid;pthread_attr_t attr;pthread_attr_init(&attr);int rc = pthread_create(&tid, &attr, task, NULL);if (rc) {printf("线程创建失败!\\n");return -1;}printf("创建主线程\\n");// Uncomment one of the following lines to observe the difference// pthread_exit(NULL);// return 0;
}

2.2 Windows

#include <iostream>
#include "windows.h"using namespace std;DWORD WINAPI ThreadFun(void* param) {Sleep(5000);cout << "子线程" << endl;return 0;
}int main() {HANDLE h;DWORD ThreadID;h = CreateThread(0, 0, ThreadFun, NULL, 0, &ThreadID);cout << "主线程执行完毕" << endl;// Uncomment the following line to observe the difference// return 0;
}

3. 运行现象

在Linux下,当主线程以pthread_exit(NULL)结束时,即使没有使用pthread_join指定去等待子线程,主线程也会等待子线程执行完毕后,才会结束程序。而当主线程以return 0结束时,主线程结束后程序也会立即结束。

在Windows下,主线程中使用return 0时,主线程执行完毕后程序会立即结束。

4. 总结

通过以上示例和现象观察,我们可以得出结论:

  • 在Linux环境下,使用pthread_exit(NULL)作为主线程的返回值会使主线程等待所有子线程执行完毕后再结束程序。
  • 在Windows环境下,主线程的return 0语句会导致程序立即结束,不会等待其他线程的完成。

选择使用pthread_exit(NULL)还是return 0取决于程序的需求,以确保线程的正确执行顺序和程序的正常结束。

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

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

相关文章

String类的使用

String常用的构造方法 String的源码 内部是一个数组和hash值&#xff0c;涉及到常量池后续补充&#xff08;常量池&#xff1a;存储相同的字符时只会存储一租&#xff09; String的比较 equals()与&#xff1a;String里面为我们提供了许多方法&#xff0c;可直接调用&#xf…

2024最新-ubuntu22.04安装最新版QT6.6~6.8教程

​ 1. 在官网下载 online_installer&#xff1a; https://download.qt.io/archive/online_installers/4.7/qt-unified-linux-x64-4.7.0-online.run 或者直接镜像站下载&#xff1a; http://mirrors.ustc.edu.cn/qtproject/archive/online_installers/4.7/qt-unified-linux-x6…

数据结构之二叉树的精讲

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

苹果汽车项目的败局:起步失误与方向迷茫

苹果汽车的发展方向内部分歧导致项目多年挣扎&#xff0c;最终在本周宣布终止。 Brian X. Chen 和 Tripp Mickle 从项目初期就开始关注苹果的汽车项目。 在过去十年中&#xff0c;许多参与苹果秘密汽车项目“泰坦”&#xff08;内部代号&#xff09;的员工戏称其为“泰坦尼克…

Python实现链表:从基础到应用

一、引言 链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。链表在内存中的存储不是连续的&#xff0c;这使得它在插入和删除操作上具有较高的效率。本文将使用Python语言来实现一个简单的链表&#xff0c;并展示其…

【前端面试题1】伪类与伪元素有什么区别

伪类与伪元素的区别&#xff1a; 1.伪类使用单冒号&#xff0c;而伪元素使用双冒号。如 :hover 是伪类&#xff0c;::before 是伪元素 2.伪元素会在文档流生成一个新的元素&#xff0c;但伪元素本身并不是DOM元素&#xff0c;并且可以使用 content 属性设置内容 CSS伪类与伪元…

卷积神经网络基本概念补充

卷积&#xff08;convolution&#xff09;、通道&#xff08;channel&#xff09; 卷积核大小一般为奇数&#xff0c;有中心像素点&#xff0c;便于定位卷积核。 步长&#xff08;stride&#xff09;、填充&#xff08;padding&#xff09; 卷积核移动的步长&#xff08;stride…

小白提示您:FaceTime诈骗持续高发,小伙伴们谨防诈骗!

前几天小白的iPhone突然接到了个FaceTime通话请求&#xff0c;说是某抖音账号需要续费啥的才能解锁某些功能。&#xff08;具体小白也记不太清了&#xff09; 这几天也有朋友说有个支付宝客服打FaceTime通话给他说快递出现了点问题&#xff0c;需要操作认证一下才能退款啥的。…

多线程万字详解

进程和线程是计算机程序执行的两个重要概念。 1.进程&#xff1a; 进程是操作系统分配资源的基本单位&#xff0c;每个进程都有自己独立的地址空间&#xff0c;每启动一个进程&#xff0c;系统就会为它分配内存。进程间通信比较复杂&#xff0c;需要用到IPC&#xff08;InterP…

js监听F11触发全屏事件

当用户使用 F11 键进行浏览器全屏时&#xff0c;由于此时并非通过浏览器提供的 Fullscreen API 进入全屏模式&#xff0c;因此无法通过 fullscreenchange 事件来监听全屏状态的变化。在这种情况下&#xff0c;可以通过监听 resize 事件来检测浏览器窗口大小的变化&#xff0c;从…

【学习日记】快速排序

思想 快速排序之所以快&#xff0c;一个重要原因就是其每一次遍历&#xff0c;都把本轮要排序的数字&#xff08;称为轴&#xff09;放到了最终的位置上快排使用分治思想&#xff0c;所以一般采用递归实现&#xff0c;非递归版本可以用栈根据第一点&#xff0c;我们需要一个函…

[渗透教程]-006-渗透测试-Metasploit

文章目录 1.Metasploit简介2.配置2.1方法1 推荐2.2方法23.使用4. Metasploitable2-linuxMetasploit攻击流程攻击实例步骤会话管理1.Metasploit简介 Metasploit是一个渗透测试平台,使您能够查找,利用和验证漏洞.是一个免费的可下载的,通过它可以很容易对计算机软件漏洞实施攻击.…

AttributeError_ ‘list‘ object has no attribute ‘view‘

问题描述 训练yolov9的时候遇到了下面的问题。 In loss_tal.py: pred_distri, pred_scores torch.cat([xi.view(feats[0].shape[0], self.no, -1) for xi in feats], 2).split( (self.reg_max * 4, self.nc), 1) The error is as follows&#xff1a; AttributeError: list …

JavaWeb之 Web概述

目录 前言1.1 Web和 JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 1.3 JavaWeb 学习内容 前言 博主将用 CSDN 记录 Java 后端开发学习之路上的经验&#xff0c;并将自己整理的编程经验和知识分享出来&a…

【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

「优选算法刷题」:删除字符串中的所有相邻重复项

一、题目 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例&#xff1a; 输…

理解C#里面的集合有哪些?怎么用,什么是安全集合?

介绍 在C#中&#xff0c;集合是一种用于存储和操作多个元素的数据结构。它们提供了各种操作&#xff0c;如添加、删除、查找等&#xff0c;以及遍历集合中的元素。集合通常根据其实现方式和行为特征进行分类。 集合继承IEnumerable 在C#中&#xff0c;几乎所有的集合类型都实现…

简历中自我评价,是否应该删掉?

你好&#xff0c;我是田哥 年后&#xff0c;不少朋友已经开始着手准备面试了&#xff0c;准备面试的第一个问题就是&#xff1a;简历。 写简历是需要一些技巧的&#xff0c;你的简历是要给面试官看&#xff0c;得多留点心。 很多简历上都会写自我评价/个人优势/个人总结等&…

2024有哪些免费的mac苹果电脑深度清理工具?CleanMyMac X

苹果电脑用户们&#xff0c;你们是否经常感到你们的Mac变得不再像刚拆封时那样迅速、流畅&#xff1f;可能是时候对你的苹果电脑进行一次深度清理了。在这个时刻&#xff0c;拥有一些高效的深度清理工具就显得尤为重要。今天&#xff0c;我将介绍几款优秀的苹果电脑深度清理工具…

一个Web3项目的收官之作,必然是友好的用户界面(Web3项目三实战之四)

正如标题所述,一个对用户体验友好的应用,总是会赢得用户大加赞赏,这是毋庸置疑的。 甭管是web2,亦或是已悄然而至的Web3,能有一个外观优美、用户体验效果佳的的界面,那么,这个应用无疑是个成功的案例。 诚然,Web3项目虽然核心是智能合约攥写,但用户界面也是一个DApp不…