关于linux线程关闭问题.

lmfree 2008-06-13 05:25:32
最近测试linxu下线程的关闭,发现如下问题.
测试使用函数: pthread系列函数, 创建 pthread_create ,关闭使用的是 pthread_cancel ,这是2个主要函数,其他都是相关线程属性的设置函数.
测试OS: FC8 在pc机测试 和 一个嵌入式linux平台,此内核为2.6.XX .
测试结果:以下是描述
进程P 拥有3个线程,A,B,C
情况1:
线程A 分别创建B和C.
在A中可以终止线程C, 使用函数pthread_cancel() 函数.无论线程C是否有退出点(包括sleep 和 pthread_testcancel,或者一个完全的while(1)),都可以终止.
FC8和嵌入式平台上都可以, 但是否有内存丢失暂时不考虑.

情况2:
线程A 创建B和C,
在线程B中使用pthread_cancel() 终止线程C .
FC8,无法终止,pthread_cancel()返回值成功(0),但线程C照常运行.直到A退出(A应该是进程的第一个线程.)
嵌入式linux,pthread_cancel()调用后,无返回值,整个进程阻塞在调用处.

情况3:
线程A创建B,B创建C.
线程B中可以通过cancel 正常终止线程C,结果和1相同.

结论:linux中只能在创建线程的线程中终止该线程(可以理解为父线程可以终止子线程),但无法在不同的子线程中终止!
问题: linux有方法在子线程中终止其他子线程吗!
...全文
2297 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
haomx 2010-05-26
  • 打赏
  • 举报
回复
pthread_exit是线程自己退出
pthread_cancel是终止其他线程
xxw19840406 2008-06-18
  • 打赏
  • 举报
回复
路过,值得好好学习!
abilityforever 2008-06-17
  • 打赏
  • 举报
回复
直接用_Exit或者Exit都行撒
sakula_so 2008-06-16
  • 打赏
  • 举报
回复
return
exit
还可以设置属性,自己脱离主线程
这三应该够了
没必要这么麻烦吧

我是新手, 请问lz 实际工程中什么环境下会用到你提到的方案呢
谢谢指教 ???
mac-2080 2008-06-16
  • 打赏
  • 举报
回复
学习
lmfree 2008-06-16
  • 打赏
  • 举报
回复
由于一直在嵌入式领域工作, linux也是接触不久, 工作中的很多是把现有的代码移植到linux下, 所以会碰到这样的应用。
FreeElf 2008-06-16
  • 打赏
  • 举报
回复
用pthread_exit或者return吧
pthread_cancel如同调用了参数为PTHREAD_CANCELED的pthread_exit函数
但是pthread_cancel并不等待线程终止,它仅仅是提出请求
线程可以选择忽略取消方式或者控制取消方式
iris2000 2008-06-16
  • 打赏
  • 举报
回复
我一般都用pthread_exit退出线程
scu_hurricane 2008-06-15
  • 打赏
  • 举报
回复
关注,学习
fierygnu 2008-06-13
  • 打赏
  • 举报
回复
为什么不用pthread_exit或者直接return?
fuqd273 2008-06-13
  • 打赏
  • 举报
回复
pthread_kill试过没有?

23,127

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧