Linux程式設計中的坑——C++中exit和return的區別
今天遇到一個坑,折騰了一天才把這個坑填上,情況是這樣的:
寫了段程式碼,在main()函式中建立一個分離執行緒,結果這個執行緒什麼都沒幹就直接掛掉了,程式碼長這樣:
int main()
{
建立一個分離執行緒();
return 0;
}
後來研(bai)究(du)了一下,原來在main()函式中寫return,會被編譯器優化成,也會像exit一樣直接殺死程序,所以分離出來的執行緒什麼都沒幹,就隨著程序一起掛掉了。
所以多執行緒程式設計中,main()函式想退出執行緒應當使用
pthread_exit(NULL);
補一下exit和return的區別:exit為直接殺死/退出當前程序,return則為退出當前函式,但是在g++編譯器中,main中的return會被自動優化成exit。。。
其實從原理來講區別應該很大的,這裡就先挖個坑寫上這些,改天再來填。。。→_→
還有個比較明顯的區別:return會呼叫區域性物件的解構函式,而exit不會(不管是否main()函式,這個區別都是存在的)
相關推薦
Linux程式設計中的坑——C++中exit和return的區別
今天遇到一個坑,折騰了一天才把這個坑填上,情況是這樣的: 寫了段程式碼,在main()函式中建立一個分離執行緒,結果這個執行緒什麼都沒幹就直接掛掉了,程式碼長這樣: int main() { 建立一個分離執行緒(); return 0; } 後來研(bai)究(
Qt C++與QML混合程式設計(1)- QML中使用C++的類和函式
本章主要介紹一下在QML中使用C++的類的兩種方法 1.設定QML的上下文屬性 為QML的節點設定上線屬性,在QML檔案中可以之間使用這個屬性的函式。 QQuickView view; view.rootContext()->setCo
awk(2)=================awk 中的next ,exit 和 數組
body apple 輸入 pos tro family app -s space (1)next 在awk 中的作用 next :從輸入文件中讀取一行,然後從頭開始執行awk 腳本 如:{if ($1 ~/test/){next} else {print} } exit:
linux程式設計--在子程序中執行一個與其父程序完全不同的另外一個程式
//pipe3.c //在子程序中執行一個與其父程序完全不同的另外一個程式:利用exec呼叫 //使用兩個程式: //1.資料生產者,用來建立管道和啟動子程序pipe3.c //2.資料消費者,pipe4.c #include <unistd.h> #include <stdlib
Linux中Ctrl+c Ctrl+z Ctrl+d 區別
Ctrl+c和ctrl+z都是中斷命令,但是他們的作用卻不一樣. Ctrl+c Ctrl+c是強制中斷程式的執行。 Ctrl+z Ctrl+z的是將任務中斷,但是此任務並沒有結束,他仍然在程序中他只是維持掛起的狀態。 fg命令在前臺恢復執行被掛起的程序,此時可以使
Java中類似C#中Task.wait()的類CountDownLatch
ava 完成 rgs tar wait方法 而在 stat down interrupt 當主線程開辟多個子線程,而又需要這些子線程都執行完成後再執行主線程後續的操作,在C#中可以通過Task的wait方法來實現,然而在Java中也有類型的類CountDownLatch,具
《隨筆十五》——C#中的 “ C#中的類定義、介面定義、遮蔽基類成員、 ”
目錄 C#中的類定義 介面的定義 遮蔽基類成員 基類訪問 C#中的類定義 class MyClass { //Members } ● 這樣定義一個類後,就可以在專案中能訪問該定義的其他位置對該類進行例項化。 在預設情況下,
Linux 下 C語言 open() 和 fopen() 區別
fopen() #include <stdio.h> FILE *fopen(const char *path, const char *mode); mode 指定檔案的開啟模式: r:只讀方式開啟一個文字檔案(該檔案必須存在) r+:可讀可寫方式開啟一個文字檔案(該檔
java中equals()的用法以及和“==”的區別
== 的作用: 基本型別:比較的就是值是否相同 引用型別:比較的就是地址值是否相同 equals 的作用: 引用型別:預設情況下,比較的是地址值。 注:不過,我們可以根據情況自己重寫該方法。一般重寫都是自動生成,比較物件的成員變數值是否相同 public class Stri
node.js中的定時器nextTick()和setImmediate()區別分析
nextTick()和setImmediate()都是延遲載入。但是nextTick()是放在當前佇列的最後一個,setImmediate()是下一個佇列的對首 console.log(1); //下一個佇列的對首 setImmediate(()=>{ console.log('set
jq中html(""),empty()和remove()區別
比如$("p").empty()和$("p").html(""),都是把<p>abcd</p>中的文字移除,留下 了<p></p>,仍保留其在dom中所佔的位置。 但是html("")會造成記憶體洩漏,empty()會
unix/linux程式設計實踐教程C語言補充(2)
1 getchar()和putchar()函式 getchar()函式的功能是從終端接受一個字元。可以將其置於程式中實現暫停功能。 getchar()函式接受的字元可以賦給一個字元型或整型變數,也可以賦給任何變數,直接輸出。 putchar(引數) 引數可以是一個字元
JavaScript中break、continue和return區別例項
在 JavaScript中break,continue和return 這三個關鍵字, 都有停止迴圈的功能,return 還有另外一個功能,就是函式返回語句,但是返回的同時也將函式停止。 下面介紹3個關鍵字在停止for迴圈中的區別: 1、break的用法 得到的結果是: 2、continue的用法
tomcat中Catalina裡的JAVA_OPTS和CATALINA_OPTS區別
tomcat中Catalina裡的JAVA_OPTS和CATALINA_OPTS區別 export JAVA_OPTS="-Dfile.encoding=utf-8" If you start Tomcat after exporting JAVA_OPTS, it wil
js中continue、break和return區別
很多人將continue、break和return混淆,不知道該怎麼用才對,下面我簡單講述一下這三個語句的作用; return:它是用在一個函式中的,他可以跳出這個迴圈(return後面的語句將不再執行),然後返回一個值(僅一個),如果你想返回多個值,那麼就要將多個值寫到一個物件中,
彙編中呼叫C中的函式,函式名前加下劃線“_”
之前見過這種用法,但是不太清楚為什麼,就以為是約定俗成,其實也算是約定俗成,這樣做的目的是為了防止符號名衝突,因為在一個程式中往往是包含彙編和C檔案的,彙編用於啟動部分,C檔案用於應用程式,最終通過編譯器實現編譯,對於編譯器來說,彙編和C是一視同仁的,那麼就會有個問題,
Linux程式設計VIM編輯器底行模式和命令模式常用指令
底行模式常用命令: :w –>儲存檔案 :q –>退出 :! –>強制執行 :ls –>列出開啟的所有檔案 :n –>切換到下一個檔案 :N –>切換
Oracle中執行儲存過程call和exec區別
在sqlplus中這兩種方法都可以使用: exec pro_name(引數1..); call pro_name(引數1..); 區別: 1. 但是exec是sqlplus命令,只能在sqlpl
用一個例子來理解MATLAB中的cell,理解{}和()的區別
如圖所示,下面的元包陣列結構 query_all含有500個cell,每一個cell是1個結構體,每一個結構體裡面有5個元素,其中score是一個多維向量,那麼; 第一種輸出形式: for queryimage=1:500 disp(query
C#方法--Gettype()和typeof()區別
是否 使用 style ron 比較 定義類 string 運算符 typeof Gettype()和typeof()區別 在比較對象時,需要了解他們的類型,才能決定他們的值是否能比較。所有的類都從System.Object中繼承了GetType()方法,常常與typeo(