在用pthread_cancel()
取消一堆相同(相同功能)的pthread后,我等待它们停止并收集退出代码:
for(j = oldest; j < thCnt ; j++){
pthread_join(thT[j], &ret); rc = (int)(intptr_t) ret;
}
大多数线程以ret == PTHREAD_CANCELED
结尾,但其中一个没有,并且其rc是115390242(总是相同的值,即使“偏心”线程可能会改变)。从我用过的百万个printfs中详细跟踪这个,我很确定它们都抓住了pthread_testcancel()
,那么为什么其中一个不能最终得到ret == PTHREAD_CANCELED
?
任何人都有类似的怪事吗?
我在Linux下,使用PTHREAD_CANCEL_DEFERRED
个线程。