我如何暂停所有线程的简历



我的用例:一个过程 ->请求暂停/简历(通过IPC) -> B Process

我的目的是在B过程为背景时保存B过程的CPU使用情况。因为B过程的所有线程都在消耗CPU使用情况。这样我就想暂停/重新启动B进程的所有线程。

Q1)如何在B进程中暂停所有线程?

以下只是我的第一个想法,但我不确定这是解决这种情况的好方法。

如果您知道一个很好的解决方案,请让我知道您的建议。

<main thread of B process>
while(1)
{
 mCondition.wait(lock);
 //all thread are create & run in here
}
<handler thread of  B process>
if(request resume)
 mCondition.notify_one();
else
 //terminate all thread of B process

=>这个想法是终止所有线程并重新创建所有线程的一种方式。

在posix平台上,您可以简单地kill(targetPid, SIG{STOP,CONT})目标processm,然后暂停/恢复其所有线程。

终止线程的真正"跨平台"方式。

当您实现暂停机制时(看起来像是条件_Variable?我只是假设是),最安全的方法可能是在某处设置"终止"标志并唤醒工作人员线程。当工作线程醒来时,首先检查此标志以查看是否应终止。如果没有,请继续其工作,但是如果是,只需找到一种方法来退出工人功能即可。这基本上是您在C 中安全终止线程的方式。

最新更新