营销策划

Linux线程结束时的资源释放-detach

微信扫一扫,分享到朋友圈

Linux线程结束时的资源释放-detach
0

在对Linux线程进行“创建”和“结束”操作的时候,要特别注意“join”和“detach”状态属性相关的问题。

关于Linux的线程创建和结束,有以下两种方法:

  • 线程创建:pthread_create
  • 线程结束:pthread_exit

很多时候,在我们的开发中,如果像下面这样去认为的话,将会发生bug。

  • pthread_create → 线程上的各种处理 → pthread_exit → 线程资源自动释放

首先,说明一下“pthread_create”这个创建操作。在Linux线程上存在着“joinable”和“join unable”两个状态。默认“pthread_create”创建的是“joinable”的线程。如果我们不去注意的话,我们创建的都是“joinable”的线程。那么“joinable”的线程到底有什么需要注意的呢?
接下来就介绍一下“joinable”和“join unable”的区别:

  • joinable:线程结束的时候,线程相关的资源(线程的句柄、栈等等)依然存在,没有被自动释放。等待其它线程去释放这些资源,或者主进程结束时自动回收。
  • joinunable:伴随着线程的结束,线程相关的资源也被自动地释放。

所以“joinable”的线程,如果在程序运行过程中结束退出,要注意它的资源有可能并没有被释放掉。很多时候因为没释放的资源比较少,我们难以察觉。但是如果该线程反复的创建、结束,那么最后会耗尽系统资源。那么为了解决这个问题,我们可以使用以下两种手段,安全的结束线程:

  • 线程创建的时候将其属性指定为“joinunable”(detach)就可以了
  • 对于“joinable”的线程,我们可以在其结束(exit)前调用“pthread_detach”函数

在设计、编码和测试的时候,对于系统的一些限制、大量反复循环处理、以及线程属性或者socket属性都是我们要加以注意的地方。

阅读原文...


曾大树的博客

Go加密解密之DES

上一篇

RHCE学习方法

下一篇

您也可能喜欢

评论已经被关闭。

插入图片
Linux线程结束时的资源释放-detach

长按储存图像,分享给朋友