Linux 多線程編程必備

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

·線程創建

  函數原型:int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);

  返回值:若是成功建立線程返回0,否則返回錯誤的編號。

  形式參數:pthread_t *restrict tidp要創建的線程的線程id指針;const pthread_attr_t *restrict attr創建線程時的線程屬性;void* (start_rtn)(void)返回值是void類型的指針函數;void *restrict arg start_rtn的形參。

·線程掛起

       該函數的作用使得當前線程掛起,等待另一個線程返回才繼續執行。也就是說當程序運行到這個地方時,程序會先停止,然後等線程id爲thread的這個線程返回,然後程序纔會斷續執行。

  函數原型:int pthread_join( pthread_t thread, void **value_ptr);

  參數說明如下:thread等待退出線程的線程號;value_ptr退出線程的返回值。

·線程退出

  函數原型:void pthread_exit(void *rval_ptr);

·獲取當前線程id

  函數原型:pthread_t pthread_self(void);

  ·互斥鎖

  創建pthread_mutex_init;銷燬pthread_mutex_destroy;加鎖pthread_mutex_lock;解鎖pthread_mutex_unlock。

  ·條件鎖

  創建pthread_cond_init;銷燬pthread_cond_destroy;觸發pthread_cond_signal;廣播pthread_cond_broadcast S;等待pthread_cond_wait。 

·正確處理Linux平臺下的線程結束問題

  在Linux平臺下,當處理線程結束時需要注意讓其所佔資源得到正確釋放。默認情況下,各個線程之間是相互獨立的,一個線程的終止不會去通知或影響其他的線程。但是已經終止的線程的資源並不會隨着線程的終止而得到釋放,我們需要調用pthread_join() 來獲得另一個線程的終止狀態並且釋放該線程所佔的資源。

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

 

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