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

问题描述 投票:1回答:2

我的用例:进程 - >请求暂停/恢复(通过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

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

c++ multithreading cpu-usage resume pause
2个回答
0
投票

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


0
投票

实际上并没有一种非常“跨平台”的方式来终止线程。

当你实现一个暂停机制(看起来像一个conditional_variable?我只是假设它)时,最安全的方法是在某处设置一个“TERMINATE”标志并唤醒工作线程。当工作线程唤醒时,首先检查此标志以查看它是否应该终止。如果没有,那么继续它的工作,但如果是,只是找到退出工作者功能的方法。这基本上就是你如何在C ++中安全地终止一个线程。

© www.soinside.com 2019 - 2024. All rights reserved.