1. 程式人生 > >pthread最簡單的多執行緒程式設計-001

pthread最簡單的多執行緒程式設計-001

/**  
* @function int pthread_create(pthread_t * thread, const pthread_attr_t * attr, void * (*start_routine)(void *), void *arg)
*     按照給定的執行緒屬性attr,在一個程序(process)裡建立一個新的執行緒(thread)
* @param attr:
*     如果attr為NULL,則內部使用預設的屬性建立執行緒。如果在建立執行緒之後修改attr,則不會對已經建立的執行緒產生作用。
* @param thread:
*     建立執行緒成功後,將thread id儲存在thread裡,返回給呼叫者。否則thrad的值是未定義的。
* @param start_routine:
*     執行緒建立成功後,開始執行執行緒的入口函式start_routine。
* @param arg:
*     呼叫者通過arg指定執行緒入口函式start_routine專用的引數指標。
* @return :
*     0 建立成功返回0
*     EAGAIN 超出了系統限制,如建立的執行緒太多,一個程序最多建立執行緒個數PTHREAD_THREADS_MAX。
*     EINVAL attr 的值無效
* @note pthread_create建立執行緒後,執行緒入口函式即開始執行,不需要顯示控制start_routine開始執行。
*     如果確實需要將此過程分為create和start2步來控制start_routine稍後執行,
*     start_routine可以通過等待一個條件變數(condition variable)進行同步的方式實現。
*/

2 pthread_exit

/**  
* @function void pthread_exit(void *status)
*     終止呼叫者執行緒,
* @param status:
*     通過status設定退出狀態,與pthread_join配對使用
* @return :
*     無返回值,也不返回到其呼叫方。
* @note 
*     如果呼叫執行緒尚未分離,則執行緒ID 和status 指定的退出狀態將保持不變,直到應用程式呼叫pthread_join() 以等待該執行緒。
*     否則,將忽略status。執行緒ID 可以立即回收。
*/

3 pthread_join

/**  
* @function int pthread_join(pthread_t thread, void **status);
*     等待thread執行緒終止
*     如果thread指代的執行緒還沒有終止,將導致呼叫執行緒掛起,直到thread指代的執行緒終止為止。
* @param thread:
*     所等待的的終止執行緒
* @param status:
*     如果status的值不等於NULL,那麼它的值是通過pthread_exit傳遞過來的。
* @return :
*     0 執行緒已經終止
*     ESRCH 多個執行緒不能等待同一個執行緒完成,否則僅有一個執行緒會成功完成。其他執行緒將終止,並返回ESRCH 錯誤。
*     EINVAL 一般表示thread是無效的引數
*     EDEADLK 檢查到死鎖狀態
* @note 
*     如果呼叫執行緒尚未分離,則執行緒ID 和status 指定的退出狀態將保持不變,直到應用程式呼叫pthread_join() 以等待該執行緒。
*     否則,將忽略status。執行緒ID 可以立即回收。
*/

4 最簡單的pthread多執行緒hello world示例