【发布时间】:2011-06-08 05:24:57
【问题描述】:
我有两个线程,相互通信;每个线程都使用'while(1) ..'。现在我需要让线程在满足特定条件时退出,从而完成应用程序。
我的问题:只从线程中“返回 (NULL)”是否安全,或者我是否也必须使用“pthread_exit”或“pthread_join”函数?
【问题讨论】:
我有两个线程,相互通信;每个线程都使用'while(1) ..'。现在我需要让线程在满足特定条件时退出,从而完成应用程序。
我的问题:只从线程中“返回 (NULL)”是否安全,或者我是否也必须使用“pthread_exit”或“pthread_join”函数?
【问题讨论】:
从线程函数返回 null 是安全的;等待他们的代码应该没问题。
POSIX 提到pthread_exit():
当除第一次调用 main() 的线程之外的线程从用于创建它的启动例程返回时,会进行对 pthread_exit() 的隐式调用。
您确实需要一些东西来等待pthread_join() 的线程,除非该线程是使用 detached 属性创建的或稍后使用 pthread_detach() 分离的。
【讨论】:
在线程的初始函数结束时调用pthread_exit(NULL) 并返回NULL 应该是等效的。但是,单独执行其中任何一项都会导致资源泄漏。为避免这种情况,您必须从另一个线程调用线程上的pthread_join,或者通过调用pthread_detach 将线程置于分离状态,或者在创建线程之前将其设置为以分离状态启动。
【讨论】: