首页 > 解决方案 > pthread_kill() 使用危险吗?

问题描述

我读过TerminateThread()在 WinAPI 中使用是危险的。

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


编辑:对不起,我的意思是pthread_kill()而不是pthread_exit()

标签: clinuxmultithreadingwinapipthreads

解决方案


引用汉弗莱·阿普尔比爵士的话,答案是“是的,也不是”。

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

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

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

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


推荐阅读