找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 服务器 Linux/BSD 查看内容

pthread_kill和pthread_cancel引起的SIGSEGV情况

2009-12-20 13:54| 发布者: admin| 查看: 120| 评论: 0|原作者: 玄霄


在调试项目代码的时候,发现总是会出现Segment Fault,跟踪了一下,发现是pthread_cancel()导致的,这是由于Linux的Native POSIX
Thread Library的实现,有一个race
condition,表现出来的现象是,对一个正要结束的线程调用pthread_cancel()的时候,会随机的收到SIGSEGV。这个问题在
UNIX各个版本,如Solaris,HP-UX,AIX上面都没有。
换一个思路,通过pthread_kill来测试线程是否存在,然后再进行相应的动作,这样应该可以避免出现向正在结束的线程调用pthread_cancel()。但是pthread_kill()也出现了SIGSEGV,真是ft,也是一样的原因。
解决方法:
1、使用pthread_mutex和pthread_cond系列函数进行同步,避免Linux NPTL中的这个race
condition。
2、增加一个状态机制,用一个全局的表来存储每个线程的状态,当线程结束的时候,将表中相应的状态从RUNNING置为DEAD;主线程不断的check那个状态表就可以了,有些dirty;-)
参考:
http://blog.chinaunix.net/u/13667/showart_222280.html
http://linux.derkeiler.com/Newsgroups/comp.os.linux.development.apps/2004-04/0632.html
http://www.9php.com/FAQ/cxsjl/c/2008/01/6564294109336.html









最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 21:20 , Processed in 0.179971 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部