所有線程都有一個線程號,也就是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後,主線程會一直等待直到等待的線程結束自己才結束,使創建的線程有機會執行。