gpt4 book ai didi

c - pthread_join() 不工作

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:27 25 4
gpt4 key购买 nike

<分区>

我正在试验 posix 线程,但无法弄清楚我现在面临的问题。

Blink1 和 Blink2 在两个线程中被调用,Blink1 应该退出并让 main 加入它,之后 Blink2 应该被 main 终止。

发生的事情是 Blink1 进行了 5 次循环,但 Blink2 只是保持无限,'printf("joined\n");' in main 永远不会被调用。

我错过了什么?又一次太愚蠢以至于无法阅读手册?

#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;
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com