关于std::atomic的一个测试现象
程序员文章站
2022-06-15 12:05:34
...
测试环境:VS2015 + Windows
主要代码如下:
#include <atomic>
vector<string> vec_int;
#这里的本意是想要将vector的地址变成一个原子对象来进行处理
std::atomic<vector<string> *> foo(&vec_int);
int th1()
{
while (true)
{
//foo = NULL; //mark 1
(*foo).push_back("123"); //mark 2
cout << "11111111111111111111111111111" << endl;
}
return 1;
}
int th2()
{
while (true)
{
//foo = &vec_int; //mark 1
(*foo).pop_back(); //mark 2
cout << "2222222222222222222222222" << endl;
}
return 1;
}
int main()
{
for (size_t i = 0; i < 50; i++)
{
thread th11(th1);
th11.detach();
thread th22(th2);
th22.detach();
}
cin.get();
}
代码比较简陋,原以为能够通过原子变量来锁住vector的地址,从而锁住整个vector.
结果程序运行一小会就崩溃了。
如果是将mark 1的代码取消注释
将mark 2的代码注释,然后运行
发现程序是能够稳定运行的