欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于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的代码注释,然后运行
发现程序是能够稳定运行的