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.pswp.cn/news/712123.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712123.shtml
英文地址,請注明出處:http://en.pswp.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不…