为什么CPU使用率在启动/停止线程后不断增加

本文关键字:线程 不断增加 CPU 使用率 启动 为什么 | 更新日期: 2023-09-27 18:02:36

我有一个程序,在一个按钮的点击,一个新的线程将被创建(如果它不存在已经),并连接到相机建立。现在考虑相同的流程,但是有N个摄像机(因此在点击时创建N个线程)。再次单击按钮后,所有之前创建的线程被告知停止执行(通过布尔标志),然后在每个线程上调用Join(500) -结束所有线程。

现在,我注意到在短时间间隔内执行的连续单击不仅会增加CPU使用率(正常情况下,当8个线程正在运行时),而且即使在线程从Join(500)调用结束后,也会使CPU使用率保持在同一水平。

是什么原因导致线程连接后CPU使用率仍然很高?

(:我也尝试了TPL的Task.WaitAll()实现并观察到相同的场景,所以我想说这不是由线程以某种方式不停止执行引起的。)

编辑:

Thread[] m_threads = new Thread[8];
void Start()
{
    for (int i = 0; i < m_threads.Length; i++)
    {
        m_threads[i] = new Thread(() =>
        {
            while (m_continue) { ... }
        });
    }
}
bool m_continue = false;
void Stop()
{
    m_continue = false;
    for (int i = 0; i < m_threads.Length; i++)
    {
        m_threads[i].Join(500);
    }
}

在第一次点击时调用Start,而在下一次点击时调用Stop。

为什么CPU使用率在启动/停止线程后不断增加

尝试更改

bool m_continue = false; 

volatile bool m_continue = false;

根据你的描述,我假设m_continue得到缓存(在寄存器或其他),因此永远不会改变,即使你在Stop()方法中分配它。