У меня есть простая программа, которая должна создать два потока с функцией hundler, которая будет запускать infnite и основной поток.
Всякий раз, когда я пытаюсь сделать pthread_join или pthread_exit для основного потока (чтобы продемонстрировать, что дочерние потоки все еще работают после pthread_exit из основного), кажется, никогда не происходит переключение контекста обратно в основной поток вЧтобы напечатать сообщение о том, что он заканчивает свою работу, "Прощай" (даже сообщение прощания до создания потока не печатается, поэтому я не совсем уверен, в чем проблема). Только функции-обработчики потоков печатают то, что онидолжен.Я установил режим сна на 4 секунды в других потоках, чтобы увидеть это сообщение перед тем, как они начнутся, должен был произойти переключение контекста на единственный доступный поток, который не спит (основной) ..
Воткод:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread(void *vargp) {
sleep(4);
while(1)
printf("First Thread No' %ld\n",pthread_self());
}
void *thread2(void *vargp) {
sleep(4);
while(1)
printf("Second Thread No' %ld\n",pthread_self());
}
int main() {
int j,i = 42;
pthread_t tid, tid2;
printf("Good bye1");
pthread_create(&tid, NULL, thread, (void*)&i);
pthread_create(&tid2, NULL, thread2, (void*)&i);
printf("Good bye");
pthread_exit(NULL);
//pthread_join(tid, (void**)&i);
//pthread_join(tid2, (void**)&j);
}