由于我得到的结果,我无法理解 pthread_join() 函数。
如果 pthread_join() 应该暂停调用线程,直到给定线程 id 的线程完成它的工作,那么为什么以下代码不先执行线程 1工作,然后执行线程 2工作。它们都是同时发生的。
如果我取出两条 pthread_join() 行(从 main 中),程序将终止并且没有任何反应。这是否意味着主线程是两个连接函数的调用进程,而主线程正在等待其他两个新创建的线程完成?
#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);
}
输出:
sleep
注释掉的输出:
有人可以解释为什么 pthread_join 没有按照文档让您相信的那样做吗?