我在Linux(CentOS 5.3)上有一个C++程序,它产生多个线程,这些线程处于无限循环中以执行作业并在某些时间内休眠.现在我必须取消正在运行的线程以防新的配置通知进入并重新启动新的线程集,我已经使用了pthread_cancel.我观察到的是,即使在接收到取消指示后,线程也没有停止,甚至在睡眠完成后一些睡眠线程也会出现.
由于不需要这种行为,在上述场景中使用pthread_cancel会引发关于好坏练习的问题.
请评论上述场景中的pthread_cancel用法.
当您使用PThreads取消时,我对清理订单有点困惑.通常,如果您的线程已分离,它会在终止时自动清除.如果它没有分离,则需要加入它以回收系统资源.
我正在阅读的教科书中陈述以下内容,奇怪的是,加入对于取消而言是可选的:
"如果你需要知道线程何时实际终止,你必须在取消后调用pthread_join加入它."
那么,我是否需要加入已取消的线程来释放其资源 - 如果没有,那么为什么呢?