pthreads - 何时使用 pthread_cancel 而不是 pthread_kill?

标签 pthreads

什么时候用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/

相关文章:

c - 线程不会终止他们的工作

需要处理查询时 C 秒滴答作响?

c - 互斥访问和系统调用

c++ - 如何将 pthread_t 映射到 pid(在 Linux 上)

c - 使用 pthreads/cond_signal/cond_wait 时如何考虑循环缓冲区大小 1?

macos - OSX - 如何查看进程中所有线程的 TID?

c - 多线程二维数组输入无法在 C 中使用 pthreads 产生输出

linux - pthread_cond_wait 从不解除阻塞 - 线程池

c - 如果多个线程并行处理,如何维护数据包的顺序?

c++ - 如何在 Linux 上的 c 中休眠或暂停 PThread