我对这个小C源有一个关于pthreads的问题:
int calc = 0;
void func(void* data){
calc = 2 * 2;
return NULL;
}
int main(){
pthread_t t;
if(0==pthread_create(&t,NULL,func,NULL)){
if(0==pthread_join(t,NULL)){
printf("Result: %d\n",calc); // 4 ?
}
}
}
如果pthread_join返回成功,“func”总是完全执行吗? (在printf上,calc总是等于4)。
答案 0 :(得分:2)
函数pthread_join
在函数成功时返回零。
文档说明pthread_join
阻塞直到线程结束,因此,通过一些应用逻辑,可以很容易地断定线程已经结束。
另一方面,pthread_join
以不同方式失败:
EINVAL
EDEADLK
ESRCH
,当它检测到线程句柄正在线程结束时使用时。如果您想了解更多信息,请查看文档