首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++多线有关问题

2013-11-01 
C++多线问题代码如下:#include iostream#include thread#include vectorusing namespace stdclass

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;
};
你这样再看一下,多程情况下输出结果和单线程情况下是不一样的,所以是线程不安全的

热点排行