pthread_join success =线程完全执行?

时间:2014-01-30 13:19:32

标签: c pthreads

我对这个小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)。

1 个答案:

答案 0 :(得分:2)

函数pthread_join在函数成功时返回零。

文档说明pthread_join阻塞直到线程结束,因此,通过一些应用逻辑,可以很容易地断定线程已经结束。

另一方面,pthread_join以不同方式失败:

  • 句柄无效时:EINVAL
  • 检测到死锁时:EDEADLK
  • 还有一个可能的错误,由open组推荐,但取决于实现:ESRCH,当它检测到线程句柄正在线程结束时使用时。

如果您想了解更多信息,请查看文档