分类:
2008-12-16 10:22:16
12.7 cancel options
(一)cancel type
当cancel request来到时,一个thread的cancel分两种type:
1.运行到cancel
point后才检查是否需要cancel,这种叫做:
PTHREAD_CANCEL_DEFERRED
2.不管是否运行到cancel point,都立马cancel,这种叫做:
PTHREAD_CANCEL_ASYNCHRONOUS
所谓的cancel point就是一些函数。这个在posix.1中有定义,当你调用这些函数的时候,会检查是否有cancle request,如果有就会起作用。
如果我们一直从事密集型运算,而没有调用这些函数怎么办,可以调用pthread_testcancel()函数手动检测是否受到了cancel request,如果没有,这个函数啥也不做。
void pthread_testcancel(void);
#include int pthread_setcanceltype(int type, int *oldtype); |
Returns: 0 if OK, error number on failure |
(二) cancel state
一个thread还可以决定,当前是否接受cancel,即可以屏蔽cancel request一段时间,等取消屏蔽后,以前的pending的request才有效。这就是cancle state:
1. PTHREAD_CANCEL_ENABLE
线程当前可以接受cancle request.
2. PTHREAD_CANCEL_DISABLE
线程当前不接受cancel request,不过重新打开后会使pending的request重新能有效
#include int pthread_setcancelstate(int state, int *oldstate); |
Returns: 0 if OK, error number on failure |