为什么 CPU 使用率在 starting/stopping 个线程后不断增加?

Why is CPU usage constantly increasing after starting/stopping threads?

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

现在,我注意到在短时间间隔内执行的连续点击不仅会增加 CPU 使用率(8 个线程 运行 时正常),而且会保持使用率不变即使在线程据称已从对 Join(500) 的调用结束后仍保持水平。

即使在加入线程后 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 在下一次点击时调用。

尝试更改

bool m_continue = false; 

volatile bool m_continue = false;

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