c - pthread_kill 不会杀死线程 C linux

标签 c linux multithreading pthreads

我正在制作一个小项目,该项目将被合并到更大的项目中。基本上它所做的是通过将线程添加到主结构来跟踪创建的线程,主结构跟踪线程的作用(其主要功能)及其 pthread_t id。另一个结构跟踪要传递给函数的数据以及 pthread_t id 存储在 threads[] 中的元素编号。它有点像米奇老鼠,它会跳来跳去,但除了需要终止线程外,它都可以正常工作。我没有出现段错误,也没有错误,程序运行良好,但是当调用 pthread_kill() 时线程没有被杀死(函数返回 0 意味着没有错误并且它工作)尽管线程继续运行直到主应用程序返回。

最佳答案

pthread_kill() 不会终止线程。与 kill() 的唯一区别是信号由指定线程处理,而不是在该线程屏蔽信号时处理(参见 pthread_sigmask())。像 SIGTERM 这样的信号在默认情况下仍会终止整个进程。

如果您正在考虑从信号处理程序调用 pthread_exit(),您应该改用 pthread_cancel()

如果所有可能被取消的代码合作(或者调用它的代码暂时禁用取消),取消是安全的。不过,大多数图书馆并不关心这一点。

更安全的方法是不强制要求线程退出,例如通过向它发送特殊消息(如果线程正常处理消息)。

或者,不必费心杀死任何线程,只需调用 _exit()_Exit()quick_exit()

关于c - pthread_kill 不会杀死线程 C linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9345232/

相关文章:

java swing线程回调

c++ - Linux 上 C 中字符数组和指针的段错误

c - 为字符串赋值..?

c - UDP 客户端/服务器 c

linux - cd 后 umask 设置更改

linux - 使用 defsym 定义的符号在 Ubuntu 16.10 上给出了错误的地址

c - gcc linux - 'CRTSCTS' 'ECHOCTL' 未声明(termios.h)

linux - 获取服务器上 CVS 文件的当前 HEAD 版本

java - ExecutorService 的 invokeAll() 会同时运行任务,或者完全取决于硬件(运行执行程序服务的地方)和网络

java - 从不同的远程源读取: how to optimize threads?