请考虑以下代码:
struct T { std::atomic<int> a = 2; };
T* t = new T();
// Thread 1
if(t->a.fetch_sub(1,std::memory_order_relaxed) == 1)
delete t;
// Thread 2
if(t->a.fetch_sub(1,std::memory_order_relaxed) == 1)
delete t;
我们完全知道线程1和线程2中的一个将执行delete
。但是我们安全吗?我的意思是假设线程1将执行delete
。是否保证当线程1 started delete
时,线程2甚至不会读取t
?