因为看完了最后一段之后就懒得写笔记了,现在补上来。
线程的撤销(cancel)
调用pthread_cancel来停止一个线程,而线程有听话和不听话两种可能。如果线程的状态是PTHREAD_CANCEL_ENABLE,那么它在碰到APUE表12.14和12.15中的任何一个函数调用(cancel point)就会停止。如果状态是PTHREAD_CANCEL_DISABLE,那么它会无视CANCEL命令。
int pthread_setcancelstate(int state, int *oldstate);
如果一个线程进行一个比较长的计算等过程,而无法及时调用cancel point的函数,那么可以用
void pthread_testcancel(void);
来进行cancel测试。如果线程状态是PTHREAD_CANCLE_DISABLE的话,这段代码就当/* ... */了。
线程的cancel分两种类型,一种是PTHREAD_CANCEL_DEFERRED,就是碰到cancel point才cancel,反之,如果是PTHREAD_CANCEL_ASYNCHRONOUS的话,则是立即cancel。
线程的撤销(cancel)
调用pthread_cancel来停止一个线程,而线程有听话和不听话两种可能。如果线程的状态是PTHREAD_CANCEL_ENABLE,那么它在碰到APUE表12.14和12.15中的任何一个函数调用(cancel point)就会停止。如果状态是PTHREAD_CANCEL_DISABLE,那么它会无视CANCEL命令。
int pthread_setcancelstate(int state, int *oldstate);
如果一个线程进行一个比较长的计算等过程,而无法及时调用cancel point的函数,那么可以用
void pthread_testcancel(void);
来进行cancel测试。如果线程状态是PTHREAD_CANCLE_DISABLE的话,这段代码就当/* ... */了。
线程的cancel分两种类型,一种是PTHREAD_CANCEL_DEFERRED,就是碰到cancel point才cancel,反之,如果是PTHREAD_CANCEL_ASYNCHRONOUS的话,则是立即cancel。