如果我调用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()和pthread_exit()
- 2. pthread_join和pthread_create
- 3. pthread_join()不工作
- 4. 非阻塞pthread_join
- 5. 在pthread_join(c)中
- 6. 多线程和pthread_join
- 7. 工作pthread_join(tid,&retval);
- 8. C++线程 - pthread_create,pthread_join
- 9. 关于pthread_create()和pthread_join()
- 10. 错误在在pthread_join
- 11. 等待pthread_create完成而不使用pthread_join
- 12. 多次调用pthread_join如何工作?
- 13. 使用指针的函数在pthread_join
- 14. glibc的时候调用在pthread_join()两次
- 15. pthread_join()和冻结执行
- 16. pthread_join是如何实现的?
- 17. 上在pthread_join(),并在pthread_create()
- 18. pthread_join()上的分段错误
- 19. pthread_join正在成为瓶颈
- 20. 的Solaris thr_join VS POSIX在pthread_join
- 21. pthread_join导致接受终止()
- 22. pthread_join块我的代码
- 23. pthread_join C中的段错误
- 24. pthread_join - 多线程等待
- 25. pthread_join跳过第一个线程
- 26. pthread_join()会导致什么信号?
- 27. pthread_join损坏堆栈中的pthread_create参数
- 28. pthread_join错误,从线程进行线程
- 29. 为什么pthread_join不能返回?
- 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