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()函數,這個區別都是存在的)得意

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章