pthread_cancel会在线程执行IO时取消线程吗?

时间:2014-12-21 20:46:00

标签: c pthreads posix

标题是非常自我解释的,因为什么时候是实际的"取消点"? POSIX要求read是一个取消点,但是当线程首次调用read时,或者一旦完成?什么时候POSIX要求取消线程?

2 个答案:

答案 0 :(得分:3)

取消时间点调用read()期间随时。来自the spec

  

当线程执行以下功能时,将发生取消点:[....] read() [....]

所以,回答你的名义问题,是的。

答案 1 :(得分:2)

在Linux上," man 7 pthreads"包含这个:

  

POSIX.1指定必须取消某些功能,并且某些其他功能可以取消          点。如果线程可取消,则延迟其可取消性类型和取消请求          正在等待线程,然后线程在调用取消函数时被取消 -          要点。

我读到这意味着当读取"读取"而不是"在读取期间#34; ...

时它是可取消的

但是,如果这是您关心的问题,并且您不希望在代码的关键部分取消特定线程,则可以使用" PTHREAD_CANCEL_DISABLE&#调用" pthread_setcancelstate() 34;在关键部分之后你可以再次调用它,这次使用" PTHREAD_CANCEL_ENABLE"。