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

 我来答
一骑当后
2014-11-01 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40298 获赞数:306440
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部
多线程退出有三种方式:
(1)执行完成后隐式退出;

(2)由线程本身显示调用pthread_exit 函数退出;
pthread_exit (void * retval) ;

(3)被其他线程用pthread_cance函数终止:
pthread_cance (pthread_t thread) ;

用event来实现。

在子线程中,在循环内检测event。
while(!e.is_active())
{
...
}
当退出循环体的时候,自然return返回。这样子线程会优雅的结束。
注意:选用非等待的检测函数。

pthread 线程有两种状态,joinable(非分离)状态和detachable(分离)状态,默认为joinable。

  joinable:当线程函数自己返回退出或pthread_exit时都不会释放线程所用资源,包括栈,线程描述符等(有人说有8k多,未经验证)。

  detachable:线程结束时会自动释放资源。

Linux man page said:

When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until another thread performs pthread_join on it. Therefore, pthread_join must be called once for each joinable thread created to avoid memory leaks.

因此,joinable 线程执行完后不使用pthread_join的话就会造成内存泄漏。

解决办法:

1.// 创建线程前设置 PTHREAD_CREATE_DETACHED 属性

pthread_attr_t attr;
pthread_t thread;
pthread_attr_init (&attr);
pthread_attr_setdetachstat(&attr, PTHREAD_CREATE_DETACHED);
pthread_create (&thread, &attr, &thread_function, NULL);
pthread_attr_destroy (&attr);

2.当线程为joinable时,使用pthread_join来获取线程返回值,并释放资源。

3.当线程为joinable时,也可在线程中调用 pthread_detach(pthread_self());来分离自己。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式