今天遇到一個坑,折騰了一天才把這個坑填上,情況是這樣的:
寫了段代碼,在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()函數,這個區別都是存在的)