好的,我有一个以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使用率增加的原因?
我这样问问题是因为我认为上面的代码不会帮助解决这个问题,所以也许知道其他人将如何解决这个问题已经对我有所帮助。