如何调试线程程序,其CPU使用率从0%开始,每10分钟增加30%?

时间:2019-05-18 18:16:40

标签: c++ windows concurrency cpu-usage msdn

好的,我有一个以0%CPU使用率开头的多线程程序。

它总是打印正确的值。

大约5-10分钟后,其CPU使用率立即增加30%。

它仍然总是打印正确的值。

再过大约5-10分钟,其CPU使用率立即立即增加30%。

重复直到达到100%。

class Test{
public:

explicit Test(){
for (int i = 0; i < threads.size(); i++) {
     threads[i] = std::thread(&Test::Open, this, i);
 }
}
Test()~ //Join all threads

static std::mutex mutex_open; //static if I want more than one Test object
std::array<std::thread, 3> threads{};
std::array<Bird, 3> birds= {};

Open(int thread_index);
Collect(int thread_index);

};

打开

void Test::Open(int thread_index) {

while (true) {

std::unique_lock<std::mutex> lock{mutex_open};
Sleep(100);


//DO STUFF

    if(condition){

       lock.unlock(); //unlock earlier if condition is met
       Collect(thread_index);
    }

  }
}

收集

 void Test::Collect(int thread_index) {

      while (!this->birds[thread_index].died) {

      Sleep(100);
      //Use this->birds[thread_index]
      //Use WINAPI ReadProcessMemory MSDN 
      //DO STUFF WITH IT
       }

  }

主要

 int main() {

  Test test();

  system("pause");

 }

在所有测试中,更精确地说,它始终位于“收集功能”内,因此Open刚开始被调用了3次。

我没有并发经验。

我已经给出了所有使用锁/互斥锁等的代码。

我想知道如何解决此问题。我可以采取哪些步骤来找出问题所在?

什么是CPU使用率增加的原因?

我这样问问题是因为我认为上面的代码不会帮助解决这个问题,所以也许知道其他人将如何解决这个问题已经对我有所帮助。

0 个答案:

没有答案