Я написал простую демонстрационную программу, чтобы понять функцию pthread_join().pthread_join() для асинхронных потоков
Я знаю, как использовать функцию pthread_condition_wait() разрешить асинхронное нарезание резьбы, но я пытаюсь понять, как я могу сделать подобную работу с помощью функции pthread_join().
В программе ниже я прохожу Thread 1s ID для Thread 2s функцию. Внутри Тема 2s function Я вызываю функцию pthread_join() и передаю в Тема 1s ID. Я ожидал, что это вызовет Thread 1 для запуска сначала, а затем для Thread 2 для запуска второй, но то, что я получаю, заключается в том, что они оба запускаются одновременно.
Является ли это потому, что только один поток может использовать pthread_join() функцию в то время, и что я уже использовал pthread_join() функцию, когда я называю его из основного потока?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *functionCount1();
void *functionCount2(void*);
int main()
{
/*
How to Compile
gcc -c foo
gcc -pthread -o foo foo.o
*/
printf("\n\n");
int rc;
pthread_t thread1, thread2;
/* Create two thread --I took out error checking for clarity*/
pthread_create(&thread1, NULL, &functionCount1, NULL)
pthread_create(&thread2, NULL, &functionCount2, &thread1)
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("\n\n");
exit(0);
}
void *functionCount1()
{
printf("\nFunction 1");
sleep(5);
printf("\nFunction 1");
return(NULL);
}
void *functionCount2(void* argument)
{
pthread_t* threadID = (pthread_t*) argument;
pthread_join(*threadID, NULL);
printf("\nFunction 2");
sleep(5);
printf("\nFunction 2");
return(NULL);
}
Выход:
Я думаю, что проблема «основной причины» - это вызов 'pthread_join (thread1, NULL);' из 'main()': это приводит к возможности параллельного соединения, которое не определено. Удаление также должно устранить проблему с недопустимым значением идентификатора потока, так как thread1 останется недействительным до вызова из потока2. – dasblinkenlight
@dasblinkenlight Это очень действительная точка. Я тоже обновлю это. Благодаря! –