Ich experimentiere mit Posix-Threads und kann einfach nicht das Problem herausfinden, mit dem ich gerade konfrontiert bin.pthread_join() funktioniert nicht
Blink1 und Blink2 werden in zwei Threads aufgerufen, Blink1 soll beendet werden und main muss dazukommen, danach soll Blink2 von main beendet werden.
Was passiert ist, dass Blink1 seine 5-Zeit-Schleife macht, aber Blink2 bleibt einfach unendlich, die 'printf ("verbunden \ n");' in main wird nie aufgerufen.
Was fehlt mir? Wieder zu blöd um das Handbuch zu lesen?
#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;
}
Haben Sie bemerkt, dass 'thrd1' zweimal verwendet wird? Das bedeutet, dass es überschrieben wird, also schließen Sie sich Ihrem zweiten Thread an, der nie endet. –