我正在尝试学习C ++本机多线程技术
我正在使用的编译器是g ++,遵循C ++ 14
我使用的开发工具是CodeBlock
我创建了10个不同的对象,并将它们用作线程的开始
#include <iostream> // std::cout
#include <thread> // std::thread
#include <vector> // std::vector
#include "TestClass.h"
int main ()
{
std::vector<std::thread> threads;
TestClass test[10];
for (int i=1; i<=10; ++i){
threads.push_back(std::thread(&TestClass::run,std::ref(test[i-1])));
}
std::cout << "synchronizing all threads...\n";
for (auto& th : threads) th.join();
for(int i=0;i<10;i++){
std::cout << test[i].Getm_Counter() << std::endl;
}
return 0;
}
线程内容如下
#ifndef TESTCLASS_H
#define TESTCLASS_H
class TestClass
{
public:
TestClass();
virtual ~TestClass();
unsigned int Getm_Counter() { return m_Counter; }
void run();
protected:
private:
unsigned int m_Counter;
};
#endif // TESTCLASS_H
实现如下
#include "TestClass.h"
TestClass::TestClass()
{
//ctor
}
TestClass::~TestClass()
{
//dtor
}
void TestClass::run(){
for(int i=0;i<10;i++){
m_Counter++;
}
}
我希望每个对象的计数为10,但结果不是这样。为什么? enter image description here
答案 0 :(得分:3)
您没有将m_Counter初始化为0或任何其他值。因此,在运行结束时,可以期望得到有关其值的任何信息(取决于它可能产生的垃圾值)。