如果我調用pthread_join(NULL)會發生什麼?pthread_join用法
回答
如果pthread_join()的兩個預期參數中的第一個爲NULL,則在運行時可能發生任何錯誤。根據www.opengroup.org上的規範:「如果pthread_join()的線程參數指定的值沒有引用可連接線程,則行爲未定義。」
NULL接受pthread_join()的第二個參數。
編輯:確實有些實現可以指定行爲。在你的系統上檢查手冊頁上的pthread_join。
你得到一個編譯時錯誤; pthread_join()
預計2個參數:)
+1真的! hahah – karlphillip 2011-03-29 14:37:43
:P:P XXXXXXXXXX – user237419 2011-03-29 14:38:12
假設我用NULL,NULL來調用它 - 會好嗎? (或者它是否正在等待非NULL pthread?) – Zach 2011-03-29 14:38:18
理想情況下,你會經常檢查函數返回:
if (0 != pthread_join(thread, &result))
{
fprintf(stderr, "pthread_join error\n");
}
如果成功,在pthread_join()函數返回零。否則,將返回一個錯誤編號以指示錯誤。
無論你試圖傳遞給函數,檢查返回,你都會知道發生了什麼! – karlphillip 2011-03-29 14:39:19
是的,如果你曾經去檢查:) – user237419 2011-03-29 14:48:15
- 1. pthread_join不起作用
- 2. pthread_join()不工作
- 3. pthread_join()和pthread_exit()
- 4. 在pthread_join(c)中
- 5. 非阻塞pthread_join
- 6. pthread_join和pthread_create
- 7. 了pthread_exit()調用在pthread_join
- 8. C++線程 - pthread_create,pthread_join
- 9. c中的Pthread_join&Pthread_exit
- 10. C pthread_join返回值
- 11. pthread_join後段錯誤
- 12. 工作pthread_join(tid,&retval);
- 13. 多線程和pthread_join
- 14. 錯誤在在pthread_join
- 15. 關於pthread_create()和pthread_join()
- 16. glibc的時候調用在pthread_join()兩次
- 17. 多次調用pthread_join如何工作?
- 18. 等待pthread_create完成而不使用pthread_join
- 19. 使用指針的函數在pthread_join
- 20. pthread_join()導致分段錯誤
- 21. pthread_join()和凍結執行
- 22. pthread_join - 多線程等待
- 23. 上在pthread_join(),並在pthread_create()
- 24. pthread_join是如何實現的?
- 25. 的Solaris thr_join VS POSIX在pthread_join
- 26. pthread_join正在成爲瓶頸
- 27. pthread_join處的分割錯誤
- 28. pthread_join導致接受終止()
- 29. pthread_join()在IOS上失敗
- 30. pthread_join中的段錯誤
一些實現定義了這種行爲,例如Linux手冊頁聲稱,如果thread_id不對應一個線程,它會立即返回'errno'設置爲'ESRCH'(儘管對我來說它傳遞NULL時簡單地崩潰) – Cubbi 2011-03-29 14:44:41
@Cubbi:一個有效的觀察;謝謝! - 但聽起來在實踐中它仍然可以是UB? – 2011-03-29 14:49:53
不斷地引用規範,但不能告訴man第一個參數是一個無符號的long值,而不是一個指針。 /usr/include/bits/pthreadtypes.h:typedef unsigned long int pthread_t;函數簽名:int pthread_join(pthread_t thread,void ** value_ptr); – user237419 2011-03-29 14:57:57