如何暂停所有线程的恢复?

时间:2019-02-18 15:37:45

标签: c++ multithreading cpu-usage resume pause

我的用例:A进程->请求暂停/恢复(通过IPC)-> B进程

我的目的是在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

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

2 个答案:

答案 0 :(得分:0)

在POSIX平台上,您只需kill(targetPid, SIG{STOP,CONT})目标进程,它将暂停/恢复其所有线程。

答案 1 :(得分:0)

终止线程并没有真正的“跨平台”方式。

当您实现暂停机制(看起来像conditional_variable?我只是假设是这样)时,最安全的方法可能是在某处设置“ TERMINATE”标志并唤醒工作线程。当工作线程唤醒时,首先检查此标志以查看是否应终止。如果不是,则继续其工作,如果是,则找到退出工作器功能的方法。基本上,这就是您使用C ++安全终止线程的方式。