pthread_cancel() 能结束哪些线程-linux
2013-12-16 14:31
330 查看
最近测试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有方法在子线程中终止其他子线程吗!
测试使用函数: 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有方法在子线程中终止其他子线程吗!
相关文章推荐
- linux下pthread_cancel无法取消线程的原因
- linux下pthread_cancel无法取消线程的原因
- pthread_cancel引起线程死锁-linux
- linux下pthread_cancel无法取消线程的原因
- 防止死锁:采用linux多线程的pthread_cancel终止线程
- Linux--多线程之线程的取消pthread_cancel
- pthread_cancel-linux 终止其他线程
- Windows和Linux上分别怎样实现等待某个线程结束?---用WaitForSingleObject和pthread_join
- linux下pthread_cancel无法取消线程的原因【转】
- linux多线程之pthread_cancel结束线程
- [Pthread] Linux上获得线程Id的方法
- linux,线程,结束过程详解
- Linux进程、线程模型,LWP,pthread_self()
- LINUX中使用PTHREAD_KILL函数测试线程是否存活的例子
- pthread_join函数及linux线程
- pthread_join函数及linux线程
- linux线程简介之pthread
- Linux下c开发 之 线程通信与pthread_cond_wait()的使用
- linux创建线程之pthread_create
- Linux线程-互斥锁pthread_mutex_t