这是我的测试代码
class bar
{
public:
explicit bar(int x) : num(x) {}
int get_num()
{
return num;
}
private:
int num;
};
shared_ptr<bar> ptr_store;
void get_func()
{
while (1)
printf("get_num:%d\n", ptr_store->get_num());
};
void set_func()
{
while (1)
//ptr_store = make_shared<bar>(1);
atomic_exchange(&ptr_store, make_shared<bar>(1));
}
int main()
{
ptr_store = make_shared<bar>(-1);
std::thread t1(get_func);
std::thread t2(set_func);
t1.join();
t2.join();
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么这个程序不会进行核心转储?
如果set_func在使用时t2破坏原点,是否会导致某些故障?是否由 保证?或者这只是一个巧合。ptr_storet1ptr_store->get_num()shared_ptr
Test environment:
OS: Ubuntu 20.04 LTS
Clang: clang version 3.9.1
G++: gcc version 7.5.0 …Run Code Online (Sandbox Code Playgroud)