2014-01-30 93 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,它檢測到線程句柄正在超過線程末尾使用。

如果你想知道更多,你應該看看文檔