(1)在C
代码中,using
return
导致
pthread_exit
取消堆栈堆栈和销毁局部变量,而只能保证
调用已
注册的取消处理程序
pthread_cancel_push()
。在某些系统上,此机制还将导致
调用C
局部变量的析构函数,但是对于可移植代码而言,这是不能保证的—查看平台文档。
此外,在main()
,return
将隐式调用exit()
,从而终止程序,而pthread_exit()
只会终止线程,程序将继续运行,直到所有线程终止或某个线程调用exit()
,abort()
或终止程序的另一功能。
(2)使用return
作品,因为POSIX规范是这样说的。返回的值存储在pthread_join()
可以检索它的地方。在pthread_join()
调用之前,不会回收线程使用的资源。
(3)我从不在原始POSIX线程中使用线程的返回值。但是,我倾向于使用更高级别的工具,例如Boost线程库,以及最近使用的C ++ 0x线程库,它们提供了在线程之间传递值(例如Future)的替代方法,从而避免了与内存管理相关的问题。暗示。