2014-01-30 94 views
0

我对并行线程蒙山这个小C源问题:pthread_join成功=线程完全执行?

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)?

+1

是什么的文件'pthread_join'说? – 2014-01-30 13:21:11

+0

函数原型中有一个输入错误,应该是void * func(void * data)。 – MichaelGoren

回答

2

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

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

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

  • 当手柄是无效的:EINVAL
  • 当检测到死锁:EDEADLK
  • 还有另一种可能的错误,通过recomended打开组,但取决于实现:ESRCH,它检测到线程句柄正在超过线程末尾使用。

如果你想知道更多,你应该看看文档