【发布时间】:2020-04-21 04:30:29
【问题描述】:
我有一个 win32 线程,正在等待带有“WaitForSingleObject”函数的互斥锁。 终止线程(使用 TerminateThread)是否安全? 在微软文档中,他们说 TerminateThread 很危险,但在这种情况下吗? 谢谢
【问题讨论】:
-
更危险的是,互斥状态没有得到正确恢复。接下来程序将因 WAIT_ABANDONED 而失败。互斥体可以报告这种不可恢复的同步状态损坏非常有用。
-
这总是不安全的调用
TerminateThread,因为线程已经可以停止等待并开始做另一项工作。如果您在它例如在关键部分(例如分配或从堆中释放)时终止它 - 在此之后所有进程都可以冻结。调用TerminateThread总是不好的解决方案,使用WaitForSingleObjectEx并发送 apc 以获得线程或更好 - 使用ZwWaitForSingleObject在这种情况下您可以向线程发送警报 -
您好,您解决了这个问题吗?你有答案吗?请随意标记它,或添加您的答案然后标记自己以帮助遇到相同问题的人。
标签: winapi