我正在試驗posix線程,只是無法弄清楚我現在面臨的問題。pthread_join()不工作
Blink1和Blink2在兩個線程中被調用,Blink1應該退出並且主要加入它,之後Blink2應該被main終止。
會發生什麼是Blink1做5次循環,但Blink2只是保持無限,'printf(「加入\ n」);'在主要從未被調用。
我錯過了什麼?又一次太傻看了手冊?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int i = 0;
void *blink1(){
int j;
for (j = 0; j < 5; j++){
//activate
printf("blink1: i = %d ON\n", i);
sleep(1);
//deactivate
printf("blink1: i = %d OFF\n", i);
sleep(1);
}
pthread_exit(NULL);
}
void *blink2(){
while (1){
//activate
printf("blink2: i = %d ON\n", i);
sleep(1);
//deactivate
printf("blink2: i = %d OFF\n", i);
sleep(1);
i++;
}
}
int main(){
pthread_t thrd1, thrd2;
//start threads
pthread_create(&thrd1, NULL, &blink1, NULL);
pthread_create(&thrd1, NULL, &blink2, NULL);
//output pid + tid
printf("PID: %d ; TID1: %lu ; TID2: %lu\n", getpid(), thrd1, thrd2);
//wait for thread 1
pthread_join(thrd1, NULL);
printf("joined\n");
//terminte thread 2
pthread_kill(thrd2, 15);
return 0;
}
您是否注意到'thrd1'使用了兩次?這意味着它被覆蓋,所以你實際上加入了你的第二個線程,永遠不會結束。 –