为什么CPU使用率不断启动/停止线后增加?(Why is CPU usage constantly

2019-10-23 21:11发布

我这里有一个按钮的点击,一个新的线程将被创建(如果不存在的话),并建立了一个摄像头的连接的程序。 现在考虑这个同样的流程,但随着摄像机N个(从而对点击创建N个线程)。 按钮再次点击后,所有先前创建的线程被告知要停止执行(通过布尔标志),然后加入(500)被称为对每一个 - 结束所有线程。

现在,我已经注意到了,很短的时间间隔内连续进行点击,不仅碰到CPU使用率(正常时,8个线程正在运行),同时也保持这种用法在同一水平甚至在线程都理应结束从呼叫加入(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);
    }
}

开始被称为第一点击,同时停止被称为按第二下。

Answer 1:

试着改变

bool m_continue = false; 

volatile bool m_continue = false;

根据你的描述,我认为m_continue被缓存(寄存器或其他),因此不会改变,甚至当你在停止分配给它()方法。



文章来源: Why is CPU usage constantly increasing after starting/stopping threads?