pthread_join success =线程是否完全执行?

jjjwad0x  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个关于pthreads的问题,这个小C源代码:

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返回成功,“函数”是否始终完全执行?(在printf上calc始终等于4?)

mw3dktmi

mw3dktmi1#

函数pthread_join在成功时返回零。
文档中说pthread_join会一直阻塞到线程结束,因此,通过一些应用逻辑,可以很容易地得出线程已经结束的结论。
另一方面,pthread_join以不同的方式失败:

  • 句柄无效时:EINVAL
  • 检测到死锁时:EDEADLK
  • 还有另一个可能的错误(由开放组推荐,但取决于实现):ESRCH,当它侦测到使用的执行绪控制代码超过执行绪的结尾时。

如果你想知道更多,你可能想看看documentation

相关问题