linux下 c中怎么让才能安全关闭线程
来源:互联网 发布:java web如何清除缓存 编辑:程序博客网 时间:2024/04/20 21:08
多线程退出有三种方式:
(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());来分离自己。
- linux下 c中怎么让才能安全关闭线程
- linux下 c中怎么让才能安全关闭线程 和 linux线程退出时执行的程序(线程清理处理程序)简单例子
- 怎么才能线程安全?
- Linux C 关闭线程
- 怎么才能让ZBrush lightBox下挂菜单完美显示
- 服务器,怎么设置才能安全
- 怎么才能让tomcat服务器下的项目让两个域名都能访问?
- linux下c线程
- 怎么才能学好C语言
- C语言怎么才能学好
- 怎么才能让网站的图片不能被游客下…
- 怎么才能让博客访问流量大
- 怎么才能让自己更优秀!
- 怎么才能让VS2008恢复默认设置
- 怎么关闭IE安全提示
- MFC中如何安全的创建和关闭线程
- Android中循环线程的安全关闭方法
- Linux下的strerror是否线程安全?
- Qt4 图形设计与嵌入式开发 第一章学习
- POJ_3683 Priest John's Busiest Day 2-Sat
- 我最喜欢的10条编程语录
- scanf("%c", &c);这句不能正常接收字符的原因。(附strindex的实现程序)
- 分布式数据库的优越性
- linux下 c中怎么让才能安全关闭线程
- Java 泛型List clone
- C 中scanf ( ) 函数用法 心得
- Spring MVC 注解-让Spring跑起来
- hdu1587
- 如何用Curl 来post xml 数据
- 塔式服务器、机架式服务器、刀片服务器区别小结
- 第一个JAVA SE项目(神马博彩)经验总结
- 快速排序算法