c - 使用 pthread_kill() 有危险吗?

标签 c linux multithreading winapi pthreads

我读到 WinAPI 中的 TerminateThread() 使用起来很危险。

在 Linux 中使用 pthread_kill() 也有危险吗?


编辑:抱歉,我指的是 pthread_kill() 而不是 pthread_exit()

最佳答案

引用 Humphrey Appleby 爵士的话,答案是“是,也不是”。

就其本身而言,调用 pthread_exit() 并不危险,并且会在您的线程退出其方法时隐式调用。但是,如果您手动调用它,则会有一些“陷阱”。

  1. 调用时会调用所有清理处理程序。因此,如果您调用此方法,然后访问清理处理程序已清理的一些内存,则会出现内存错误。
  2. 同样,调用此函数后,线程的任何局部变量和线程局部变量都将失效。因此,如果对它们进行引用,您可能会遇到内存错误。
  3. 如果线程已经调用它(隐式或显式),再次调用它有未定义的行为,并且
  4. 如果这是您进程中的最后一个线程,这将导致进程退出。

如果您注意上述事项(即,如果您在调用 pthread_exit 后注意不要引用有关线程的任何内容),那么手动调用 call 是安全的。但是,如果您使用 C++ 而不是 C,我强烈建议您使用 std::thread 类而不是手动执行。它更易于阅读,涉及的代码更少,并确保您不会破坏上述任何内容。

有关更多信息,请键入“man pthread_exit”,它基本上会告诉您以上内容。

关于c - 使用 pthread_kill() 有危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50215589/

相关文章:

linux - ARM Linux : Why does the linux expect the register r0 to be set to zero

php 5.3 和 APC(发生了什么)?

c - 在 Linux 上使用 gcc 链接共享库

PHP Fpm 进程正在终止我的网站 : process is blocked with status D

c++ - 在线程中运行函数

c++ - 使用 std::adopt_lock 选项构造后,std::lock_guard 是否释放互斥锁?

multithreading - 无法从 Delphi 中的线程使用 ICS (THtmlSmtpCli) 发送电子邮件

c - pcap中不同线程中的数据包处理程序

c - 将结构指针设置为等于另一个结构的地址

c++ - 对于客户端服务器程序,并行接收多个客户端连接请求的最佳方法是什么?