仅当取消操作安全时才应取消线程。pthreads 标准指定了几个取消点,其中包括:
通过 pthread_testcancel 调用以编程方式建立线程取消点。
根据POSIX标准,pthread_join()、pthread_testcancel()、pthread_cond_wait()、 pthread_cond_timedwait()、sem_wait()、sigwait()等函数以及read()、write()等会引起阻塞的系统调用都是Cancelation-point,而其他pthread函数都不会引起Cancelation动作。
被 sigwait(2) 阻塞的线程。
一些标准的库调用。通常,这些调用包括线程可基于其阻塞的函数。有关列表,请参见 cancellation(5) 手册页。
缺省情况下将启用取消功能。有时,您可能希望应用程序禁用取消功能。如果禁用取消功能,则会导致延迟所有的取消请求,直到再次启用取消请求。
有关禁用取消功能的信息,请参见pthread_setcancelstate 语法。
请使用 pthread_testcancel(3C) 为线程建立取消点。
void pthread_testcancel(void);
#include <pthread.h>pthread_testcancel();
当线程取消功能处于启用状态且取消类型设置为延迟模式时,pthread_testcancel() 函数有效。如果在取消功能处于禁用状态下调用 pthread_testcancel(),则该函数不起作用。
请务必仅在线程取消操作安全的序列中插入 pthread_testcancel()。除通过 pthread_testcancel() 调用以编程方式建立的取消点以外,pthread 标准还指定了几个取消点。有关更多详细信息,请参见取消点。
联系客服