C++多线问题
代码如下:
#include <iostream>
#include <thread>
#include <vector>
using namespace std;
class Counter
{
public:
Counter(int _value):value(_value){}
void increaseValue()
{
++value;
}
int value;
};
int main()
{
Counter counter(0);
std::vector<thread> threadVec;
for (int i = 0; i < 5; ++i)
{
threadVec.push_back(thread([&counter]()
{
for(int j = 0; j < 100; ++j)
{
counter.increaseValue();
}
}
));
}
for (auto& thread : threadVec)
{
thread.join();
}
cout<<counter.value<<endl;
}
上面这段代码照例说应该是非线程安全的,但是为什么我每次运行的结果都是500? 线程安全
[解决办法]
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
最后的结果是500,并不代表是线程安全的.
class Counter
{
public:
Counter(int _value):value(_value){}
void increaseValue()
{
cout<<"thread start............."<<endl;
++value;
cout<<value<<endl;
cout<<"thread end............."<<endl;
}
int value;
};
你这样再看一下,多程情况下输出结果和单线程情况下是不一样的,所以是线程不安全的