LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 734|回复: 3

请教关于pthread

[复制链接]
发表于 2005-2-22 14:00:24 | 显示全部楼层 |阅读模式
如果用pthread_testcancel()设置了取消点,那如果调用了pthread_cancel(),在默认情况下会不会只在这些用pthread_testcancel()设置的取消点上中止线程?或者说我能不能就只让线程在我指定的位置结束?
 楼主| 发表于 2005-2-22 16:11:31 | 显示全部楼层
还有一个问题:
所谓的异步取消是什么意思啊?
比如所下面的一段代码:
while(1){
     status=pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &cancel_type);
     if(status != 0)
        break;
     for(i=0 ; i < SIZE ; i++)
        for(j=0 ; j < SIZE ; j++){
             matrixc[j]=0;
             for(k=0 ; k < SIZE ; k++)
                  matrixc[j]+=matrixa[k]*matrixb[k][j];
        }
     status=pthread_setcanceltype(cancel_type , &cancel_type);
     if(status != 0)
        break;
}
如果一个线程调用了这段代码,那么如果这个线程突然其他的线程调用pthread_cancel()中断了,可能会在那里被中断?
回复 支持 反对

使用道具 举报

发表于 2005-2-22 16:47:12 | 显示全部楼层
异步取消(PTHREAD_CANCEL_ASYNCHRONOUS)就是“立即取消”,当线程收到取消请求时立即结束其执行。
与之相对的是推迟取消(PTHREAD_CANCEL_DEFERRED),当线程收到取消请求,等到达取消点时才结束其执行。
默认情况下是推迟取消,即当调用pthread_cancel,被取消线程只在你指定的取消点上取消,但“取消点”并不仅限于调用 pthread_testcancel 的位置。还包括pthread_join, pthread_cond_wait, pthread_cond_timedwait, sem_wait, sigwait。

不妨自己编程序一一验证一下,这样最可靠。    参考 man pthread_cancel。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-22 19:38:10 | 显示全部楼层
谢谢!
我编了一个,我是以为在屏幕上输出也是取消点的。
结果那个程序有点问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表