Я написал простую демонстрационную программу, чтобы понять функцию pthread_join()
.
Я знаю, как использовать функцию pthread_condition_wait()
, чтобы разрешить асинхронную поточность, но я пытаюсь понять, как я могу выполнять аналогичную работу, используя функцию pthread_join()
.
В приведенной ниже программе я передаю идентификатор Thread 1s в функцию Thread 2s. Внутри функции Thread 2s я вызываю функцию pthread_join()
и передаю идентификатор Thread 1s. Я ожидал, что это приведет к тому, что 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);
}
Выход: