当前位置:  技术问答>linux和unix

POSIX 线程取消点

    来源: 互联网  发布时间:2017-01-23

    本文导语:  取消点 根据POSIX标准,pthread_join()、pthread_testcancel()、pthread_cond_wait()、 pthread_cond_timedwait()、sem_wait()、sigwait()等函数以及read()、write()等会引起阻塞的系统调用都是Cancelation-point,而其他pthread函数都不会引起Cancelation动...

取消点

根据POSIX标准,pthread_join()、pthread_testcancel()、pthread_cond_wait()、 pthread_cond_timedwait()、sem_wait()、sigwait()等函数以及read()、write()等会引起阻塞的系统调用都是Cancelation-point,而其他pthread函数都不会引起Cancelation动作。

但是pthread_cancel的手 册页声称,由于LinuxThread库与C库结合得不好,因而目前C库函数(比如read())在linux种都不是Cancelation-point;但CANCEL信号会使线程从阻塞的系统调用中退出,并置EINTR错误码,因此可以在需要作为Cancelation-point的系统调用前后调用 pthread_testcancel(),从而达到POSIX标准所要求的目标,即如下代码段:

pthread_testcancel();
retcode = read(fd, buffer, length);
pthread_testcancel();


根据上面的说的,我的问题是,即然read函数前后不加pthread_testcancel(),也能使它在接收到CANCEL信号会使线程从阻塞的系统调用中退出,为什么还要加,岂不是多余吗? 难道加了后,如果read阻塞后,收到cance信号不是退出线程,而是退出read函数?然后再继续执行pthread_testcancel()进行判断是否要立即退出之类的吗? 

    

|
read阻塞后,收到cance信号不是退出线程,而是退出read函数。然后再继续执行pthread_testcancel()进行判断是否要立即退出。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • POSIX IPCs 和 System V IPCs
  • makefile中的D_POSIX_C_SOURCE是什么意思?
  • 关于什么是POSIX?
  • 请问以下操作系统中,支持posix的有哪些呢?
  • redhat linux支持什么标准? POSIX, ANSI,SVR4?
  • 谁有关于posix的详细资料
  • 请问那里能下载POSIX函数参考手册
  • 请教POSIX 和 System V 实现的内存共享的相同及不同之处
  • LINUX如何调整POSIX消息队列大小
  • posix共享内存区
  • POSIX 文件系统 Libsqlfs
  • 哪里有POSIX标准下载(免费的)?
  • 请问怎样找posix文档?
  • 请问谁知道哪能找到“POSIX多线程程序设计”么?
  • 求,Programming with POSIX Threads by David Butenhof,多谢
  • 求助关于posix ipc 对象创建相关问题
  • SUSv2是一种*nix接口标准吗,就像POSIX.1-2001一样?
  • posix消息队列问题
  • redhat9.0下是不是不能用posix消息队列,如果有应包含什么头文件?
  • 如何使用命令行删除Linux下的POSIX有名信号灯


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3