1.判斷兩個線程是否相等 int pthread_equal(pthread_t tid1,pthread_t tid2);頭文件包含<pthread.h>,若相等則返回非0,否則返回0. 2.獲得自身線程ID pthread_t pthread_self(void);頭文件包含<pthread.h>,返回值返回調用線程的線程ID,無出錯返回。 3.線程的創(chuàng)建 int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn),void *restrict arg);頭文件包含<pthread.h>;若成功則返回0,否則返回錯誤編號。 參數(shù): tidp:新創(chuàng)建線程的線程ID。 attr:定制各種不同的線程屬性。NULL,表示創(chuàng)建默認屬性的線程。 start_rtn:新創(chuàng)建的線程從start_rtn函數(shù)的地址開始運行,該函數(shù)只有一個無類型指針參數(shù)arg,如果需要 向start_rtn函數(shù)傳遞的參數(shù)不止一個,那么需要把這些參數(shù)放到一個結構中,再把這個結構的地址作為arg參數(shù)傳入。 注意: 1.線程創(chuàng)建時并不能保證哪個線程會先運行,新創(chuàng)建的線程可以訪問進程的地址空間,并且繼承調用線程的浮點環(huán)境和信號 屏蔽字,但是該線程的未決信號集被清除。 2.主線程把新線程ID存放在tidp中,但是新建的線程并不能安全地使用它,如果新線程在主線程調用pthread_create返回 之前就運行了,那么新線程看到的是未經(jīng)初始化的tidp的內容,這個不是正確的線程ID.故可用pthread_self函數(shù)獲取。 4.線程終止 1.如果進程中的任一線程調用了exit,_Exit或者_exit,那么整個進程就會終止。 2.單個線程可以通過下列三種方式退出,在不終止整個進程的情況下停止它的控制流。 a.線程只是從啟動例程中返回,返回值是線程的退出碼。(即正常死亡,return NULL) b.線程可以被同一進程中的其它線程取消。(即謀殺,pthread_cancel) c.線程調用pthread_exit。(即自殺) 3.void pthread_exit(void *rval_ptr);包含頭文件<pthread.h>;rval_ptr是一個無類型指針,與傳給啟動例程 的單個參數(shù)類似。進程中的其他線程可以通過調用pthread_join函數(shù)訪問到這個指針。 4.int pthread_join(pthread_t thread,void **rval_ptr);包含頭文件<pthread.h>;成功返回0,失敗錯誤編號。 注意: a.調用線程將一直阻塞,直到指定的線程調用pthread_exit,從啟動例程中返回或被取消。 b.如果線程只是從它的啟動例程返回,rval_ptr將包含返回碼。如果線程被取消,由rval_ptr指定的內存單元就置為 PTHREAD_CANCELED. c.指針可以傳遞包含更復雜信息的結構的地址,但是注意這個結構所使用的內存在調用者完成調用以后必須仍然有效,否 則就會出現(xiàn)無效或非法內存訪問(為了解決這個問題,可以使用全局結構,或者用malloc函數(shù)分配結構。) 5.int pthread_cancel(pthread_t tid);包含頭文件<pthread.h>;成功返回0,否則返回錯誤編號。 注意: a.等同于調用了參數(shù)為PTHREAD_CANCELED的pthread_exit函數(shù),但是線程可以選擇忽略取消方式或是控制取消方式。 它僅僅提出請求。 b.線程可以安排它退出時需要調用的函數(shù),即線程清理處理程序。 void pthread_cleanup_push(void (*rtn)(void *),void *arg); void pthread_cleanup_pop(int execute); c.當execute的參數(shù)為0時,線程的自然死亡并不執(zhí)行線程清理處理程序。而其余兩種都行。當execute的參數(shù) 非0時,線程的自然死亡也能執(zhí)行該清理處理程序。 6.int pthread_detach(pthread_t tid);包含頭文件<pthread.h>;若成功返回0,否則返回錯誤編號。 注意:在默認情況下,線程的終止狀態(tài)會保存到對該線程調用pthread_join,如果線程已經(jīng)處于分離狀態(tài),線程的底層 存儲資源可以在線程終止時立即被收回。當線程被分離時,并不能用pthread_join函數(shù)等待它的終止狀態(tài)。 對分離態(tài)的線程進行pthread_join的調用會產(chǎn)生失敗,返回EINVAL。 7.線程同步 a.互斥量:(mutex) b.int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);初始化互斥量。成功返回0,失敗返回錯誤編號。 c.int pthread_mutex_destroy(pthread_mutex_t *mutex);摧毀互斥量。成功返回0,失敗返回錯誤編號。 d.int pthread_mutex_lock(pthread_mutex_t *mutex);上鎖;成功返回0,否則返回錯誤編號。 e.int pthread_mutex_trylock(pthread_mutex_t *mutex);嘗試上鎖 f.int pthread_mutex_unlock(pthread_mutex_t *mutex);解鎖 |
|
來自: 書永夜 > 《Linux系統(tǒng)編程》