【问题标题】:pthread_join success = thread entirely executed?pthread_join 成功 = 线程完全执行?
【发布时间】:2014-01-30 13:19:32
【问题描述】:

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

【问题讨论】:

  • pthread_join 的文档是怎么说的?
  • 函数原型有错别字,应该是void* func(void* data)。

标签: c pthreads


【解决方案1】:

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

文档说pthread_join 会阻塞直到线程结束,因此,使用一些应用逻辑可以很容易地得出线程已经结束的结论。

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

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

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

【讨论】:

    猜你喜欢
    • 2013-12-12
    • 2014-03-18
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多