什么时候用pthread_cancel
而不是 pthread_kill
?
最佳答案
我不会使用这两个,但这只是个人喜好。
两者中, pthread_cancel
是终止线程最安全的方法,因为该线程只有在使用 pthread_setcancelstate()
将其可取消性状态设置为 true 时才会受到影响。 .
换句话说,它不应该在以可能导致死锁的方式持有资源的情况下消失。 pthread_kill()
call 向特定线程发送信号,这是一种异步影响线程的方法,而不是取消它。
我的大多数线程都倾向于循环工作,并定期检查标志以查看它们是否应该退出。这主要是因为我是在一个世界长大的pthread_kill()
很危险,pthread_cancel()
不存在。
我赞同每个线程应该完全控制自己的资源的理论,包括它的执行生命周期。我一直发现这是避免僵局的最佳方法。为此,我简单地使用互斥体在线程之间进行通信(我很少发现需要真正的异步通信)和用于终止的标志变量。
关于pthreads - 何时使用 pthread_cancel 而不是 pthread_kill?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3438536/