歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 對Linux中多線程編程中pthread_join的理解

對Linux中多線程編程中pthread_join的理解

日期:2017/3/1 9:53:13   编辑:Linux編程

在Linux中,默認情況下是在一個線程被創建後,必須使用此函數對創建的線程進行資源回收,但是可以設置Threads attributes來設置當一個線程結束時,直接回收此線程所占用的系統資源,詳細資料查看Threads attributes。

其實在Linux中,新建的線程並不是在原先的進程中,而是系統通過一個系統調用clone()。該系統copy了一個和原先進程完全一樣的進程,並在這個進程中執行線程函數。不過這個copy過程和fork不一樣。 copy後的進程和原先的進程共享了所有的變量,運行環境。這樣,原先進程中的變量變動在copy後的進程中便能體現出來

那麼pthread_join函數有什麼用呢???

pthread_join使一個線程等待另一個線程結束。

代碼中如果沒有pthread_join主線程會很快結束從而使整個進程結束,從而使創建的線程沒有機會開始執行就結束了。加入pthread_join後,主線程會一直等待直到等待的線程結束自己才結束,使創建的線程有機會執行

所有線程都有一個線程號,也就是Thread ID。其類型為pthread_t。通過調用pthread_self()函數可以獲得自身的線程號。

在多線程編程的時候我們往往都是以for循環的形式調用pthread_join函數,既然運行prhtead_join之後主線程就阻塞了,也沒法調用後面的pthread_join,那麼以for循環有什麼用呢?

主線程是在第一個線程處掛起。

比如有:

pthread_join(1,NULL);

pthread_join(2,NULL);

pthread_join(3,NULL);

pthread_join(4,NULL);

pthread_join(5,NULL);

實際上主線程在pthread_join(1,NULL);這裡就掛起了,在等待1號線程結束後再等待2號線程。

當然會出現3,4,5比1,2先結束的情況。主線程還是在等待1,2結束後,發現3,4,5其實早已經結束了,就會回收3,4,5的資源,然後主線程再退出。

Copyright © Linux教程網 All Rights Reserved