pthread最簡單的多執行緒程式設計-001
阿新 • • 發佈:2019-02-14
/** * @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 可以立即回收。 */