我编写了一个简单的演示程序,以便我可以理解该pthread_join()
功能。
我知道如何使用该pthread_condition_wait()
函数来允许异步线程,但我试图了解如何使用该pthread_join()
函数进行类似的工作。
在下面的程序中,我将Thread 1s ID 传递给Thread 2s函数。在Thread 2s函数中,我调用该pthread_join()
函数并传入Thread 1s ID。我希望这会导致线程 1先运行,然后线程 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);
}
输出: