linux下 c中怎么让才能安全关闭线程

嗯...对...纱线池确实是一个东西。
2 02 2 年,我遇到了一个项目,代码很旧,线程乱飞,释放请求太频繁。
结果呢?内存泄漏、死锁,都是让人头疼的事情。

如何退出线程?有几种方法。

第一种是执行完成后自然退出。
这样也好,但是如果线程函数没写好,崩溃了,那不是崩溃了吗?很烦人。

其次,线程本身调用pthread_exit。
所以,当我说我愿意的时候,我就把它留下了。
传递一个返回值或者其他的东西就可以了。

第三,这是最狠的。
其他线程使用 pthread_cancel 来终止它。
如果你想一下,一个线程突然被另一个线程杀死了。
这个逻辑……哦,还挺复杂的。
用得不多。

然后,主题有状态。
要么是可连接的,要么是可拆卸的。
detachable表示可拆卸,默认一般是不可拆卸的。
Joinable 意味着你必须手动处理它。

joinable的缺点是,当线程终止时,如果不加入它,就不会释放资源。
堆栈、描述符等可能保留在那里。
内存泄漏,就是这样的情况。
我当时就遇到了。
调试了半天终于发现是我忘记加入线程了。
2 02 2 年的项目可能也会出现类似的问题。

detachable 好处是,当线程结束时,系统会自动为你释放资源。
安心。

如何使用可分离?
当您创建线程时,您可以设置属性。
使用pthread_attr_t,这个结构体。
首先init,然后设置detach状态,设置为PTHREAD_CREATE_DETACHED。
再次创建线程。
使用后,attr必须被销毁。

或者,线会自行断裂。
在线程函数中,调用pthread_detach(pthread_self());。
这样,当线程自行终止时,可以自动释放资源。
但是,这应该在线程本身的上下文中调用。

还有另一种类型,就是可连接线程。
你可以使用 pthread_join 来获取它的返回值并顺便释放资源。
这是最直接的,但是你要记得调用它。

总之,使用线程池来频繁应用线程释放是一个好主意。
否则,主题状态和资源释放处理起来就比较麻烦。

std::thread类

并行计算8:C++11多线程4 → Join 和 Detach

创建线程后,必须调用Join()或detach()。

join():等待线程完成并调用一次。
detach():调用一次,无需等待线程完成。

主线程调用 th1 .join() 并阻塞,直到 th1 完成。

在detach()之后不能调用Join()。

使用RAII来管理线程资源。

当线程终止时,资源会自动清理。

关于C++11 中的thread::detach()函数的问题

纱线解耦允许线程在后台运行而不会阻塞,并且资源会自动清理。

项目:2 02 2 年我会做游戏开发,用线程来制作游戏逻辑。

时间:上线前,确保逻辑线程不耽误主线程。

数字:CPU 使用率降低 1 5 %。