暂停一个线程使其等待是否有任何好处?

Can*_*pus 4 windows winapi multithreading

我正在浏览遗留代码,发现代码使用SuspendThread函数来暂停工作线程的执行.只要工作线程需要处理请求,调用线程就会恢复此工作线程.任务完成后,线程将自行挂起.

我不知道为什么这样做.根据我的说法,可以使用WaitForSingleObject API的Event对象更优雅地完成它.

我的问题是,与使线程等待同步对象相比,暂停线程有什么好处(如果有的话)?在哪种情况下,您更喜欢SuspendThread,ResumeThread API?

Kev*_*ose 11

没有.

在我曾经工作的每个环境中都不鼓励挂起一个线程.主要关注的是线程可能会在某个资源上锁定时被挂起,可能导致死锁.根据同步对象保存的任何资源都不值得死锁风险.

当一个线程等待时,这不是一个问题,因为线程固有地控制它自己的"暂停"并且可以确保释放它所持有的任何锁.

如果您阅读有关SuspendThread的文档,您将看到它适用于调试器.如果可以,请将其从任何应用程序代码中删除.


为了说明我的观点,我遇到了一个"不使用"暂停方法的列表:

作为旁白; 我真的很惊讶.NET中的Thread.Suspend在1.0/1.1中被"支持",它应该从一开始就是值得警告的.