我有两个线程,彼此通信;每个线程都使用'while(1) ..'。现在我需要让线程在满足特定条件时退出,并因此完成应用程序。
我的问题是:仅从线程中返回(NULL)是否安全,还是我也必须使用'pthread_exit'或'pthread_join'函数?
我的问题是:仅从线程中返回(NULL)是否安全,还是我也必须使用'pthread_exit'或'pthread_join'函数?
从线程函数返回null是安全的;等待它们的代码应该没问题。
POSIX关于pthread_exit()
的说明如下:
当一个线程返回用于创建它的起始例程时,除了第一次调用main()的线程之外的线程会隐式调用pthread_exit()。
你确实需要使用pthread_join()
来等待线程,除非该线程使用了分离属性或稍后使用pthread_detach()
进行分离。
在线程的初始函数结束时调用pthread_exit(NULL)
或返回NULL
应该是等效的。然而,仅使用其中之一将导致资源泄漏。为了避免这种情况,您必须从另一个线程调用pthread_join
来加入此线程,或者在创建线程之前将其设置为分离状态,方法是调用pthread_detach
。