我读到 WinAPI 中的 TerminateThread()
使用起来很危险。
在 Linux 中使用 pthread_kill()
也有危险吗?
编辑:抱歉,我指的是 pthread_kill()
而不是 pthread_exit()
。
最佳答案
引用 Humphrey Appleby 爵士的话,答案是“是,也不是”。
就其本身而言,调用 pthread_exit() 并不危险,并且会在您的线程退出其方法时隐式调用。但是,如果您手动调用它,则会有一些“陷阱”。
- 调用时会调用所有清理处理程序。因此,如果您调用此方法,然后访问清理处理程序已清理的一些内存,则会出现内存错误。
- 同样,调用此函数后,线程的任何局部变量和线程局部变量都将失效。因此,如果对它们进行引用,您可能会遇到内存错误。
- 如果线程已经调用它(隐式或显式),再次调用它有未定义的行为,并且
- 如果这是您进程中的最后一个线程,这将导致进程退出。
如果您注意上述事项(即,如果您在调用 pthread_exit 后注意不要引用有关线程的任何内容),那么手动调用 call 是安全的。但是,如果您使用 C++ 而不是 C,我强烈建议您使用 std::thread 类而不是手动执行。它更易于阅读,涉及的代码更少,并确保您不会破坏上述任何内容。
有关更多信息,请键入“man pthread_exit”,它基本上会告诉您以上内容。
关于c - 使用 pthread_kill() 有危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50215589/