之前有人问过这个话题,但我仍然不太清楚 pthread_join() 的用法。
我在某处读到,当线程存在而没有与主线程连接时,资源不会被清理。我们所说的资源是什么?如果这些资源存在于调用线程的堆栈中,当调用线程存在时它们不会被清除吗?所以我认为 pthread_join() 有助于清理堆中存在的资源?还有使用 pthread_exit() 的好处是什么?
之前有人问过这个话题,但我仍然不太清楚 pthread_join() 的用法。
我在某处读到,当线程存在而没有与主线程连接时,资源不会被清理。我们所说的资源是什么?如果这些资源存在于调用线程的堆栈中,当调用线程存在时它们不会被清除吗?所以我认为 pthread_join() 有助于清理堆中存在的资源?还有使用 pthread_exit() 的好处是什么?
当线程函数返回时,线程终止。如果您的线程函数调用其他辅助函数,您可能有一个调用堆栈,如线程函数 -> helper1 -> helper2 -> helper3。当 helper3 现在得出线程应该终止的结论时,您可以返回每个函数并让每个调用者检测终止的必要性。或者 helper3 可以调用pthread_exit
.
线程不仅是它们执行的代码,而且是一些操作系统管理信息,如句柄、优先级、返回值等。此信息必须保存在内存中,直到删除对线程的最后引用。pthread_join
将释放此引用,以便操作系统可以释放线程。
在 Linux 上,终止的线程/进程被置于“僵尸状态”,它们只是等待关闭。