函式pthread_join用來等待一個執行緒的結束,執行緒間同步的操作。頭檔案 : #include <pthread.h>
函式定義: int pthread_join(pthread_t thread, void **retval);
描述 :pthread_join()函式,以阻塞的方式等待thread指定的執行緒結束。當函式返回時,被等待執行緒的資源被收回。如果執行緒已經結束,那么該函式會立即返回。並且thread指定的執行緒必須是joinable的。
參數 :thread: 執行緒標識符,即執行緒ID,標識唯一執行緒。retval: 用戶定義的指針,用來存儲被等待執行緒的返回值。
返回值 : 0代表成功。 失敗,返回的則是錯誤號。
基本介紹
- 中文名:pthread_join
- 頭檔案 :#include <pthread.h>
- 參數:thread、retval:
- 屬性:函式
函式套用
使用範例
// 子執行緒阻塞,等待信號,然後輸出字元串
// 主執行緒從鍵盤錄入字元,給子執行緒發信號。
#include <stdio.h>#include <unistd.h>#include <signal.h>#include <pthread.h>#include <time.h>pthread_ttid;sigset_test;pthread_t tid;sigset_t set;void myfunc(){ printf("hello\n");}static void *mythread(void *p){ int signum; while (1) { sigwait(&set, &signum); if (SIGUSR1 == signum) myfunc(); if (SIGUSR2 == signum) { printf("Iwillsleep2secondandexit\n"); sleep(2); break; } }}int main(){ char tmp; void *status; sigemptyset(&set); sigaddset(&set, SIGUSR1); sigaddset(&set, SIGUSR2); sigprocmask(SIG_SETMASK, &set, NULL); pthread_create(&tid, NULL, mythread, NULL); while (1) { printf(":"); scanf("%c", &tmp); if ('a' == tmp) { pthread_kill(tid, SIGUSR1); //傳送SIGUSR1,列印字元串。 } else if ('q' == tmp) { //發出SIGUSR2信號,讓執行緒退出,如果傳送SIGKILL,執行緒將直接退出。 pthread_kill(tid, SIGUSR2); //等待執行緒tid執行完畢,這裡阻塞。 pthread_join(tid, &status); printf("finish\n"); break; } else continue; } return 0;}