用原子多线程代码删除容器

问题描述 投票:1回答:1

请考虑以下代码:

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

c++ multithreading atomic
1个回答
1
投票

编辑:

© www.soinside.com 2019 - 2024. All rights reserved.