52得票4回答
如何有效地使用std::atomic<>来处理非原始类型?

对于 std::atomic&lt;&gt; 的定义似乎显示了它在原始类型或者POD类型中的明显有用性。 那么在什么情况下你会真正使用它来处理类? 在什么情况下你应该避免使用它来处理类?

49得票2回答
原子变量是无锁的吗?

当我们谈论原子变量时,比如C++11的atomic&lt;&gt;,它是无锁的吗?还是无锁性是另一回事?如果我使用原子变量管理队列,它会比无锁队列慢吗?

48得票2回答
获取/释放与顺序一致内存顺序

对于任何T是原始类型的std::atomic&lt;T&gt;: 如果我在fetch_xxx操作中使用std::memory_order_acq_rel,在load操作中使用std::memory_order_acquire,在store操作中使用std::memory_order_rele...

45得票7回答
无锁同步是否总是优于使用锁的同步?

在C++中,有一个原子类型std::atomic&lt;T&gt;。这个原子类型可以是无锁的,也可能不是,这取决于类型T和当前平台。如果一个平台上为类型T提供了无锁实现,那么大多数编译器都会提供无锁的atomic&lt;T&gt;。在这种情况下,即使我想要非无锁的atomic&lt;T&gt;...

44得票3回答
使用std::atomic_int时出现“使用已删除的函数”错误

我想使用一个 std::atomic_int 变量。在我的代码中,我有:#include &lt;atomic&gt; std::atomic_int stop = 0; int main() { // Do something } 这会让我编译时出错:use of deleted...

43得票3回答
我必须使用atomic<bool>来作为“exit”布尔变量吗?

我需要设置一个标志来让另一个线程退出。那个线程不时检查退出标志。我必须为该标志使用原子操作吗?还是只使用普通布尔值就足够了,为什么(如果我使用普通布尔值会有什么问题,请给出具体例子)?#include &lt;future&gt; bool exit = false; void thread_...

42得票3回答
如何实现原子计数器

尝试创建一个独特的ID生成函数,得到了以下结果: std::atomic&lt;int&gt; id{0}; int create_id() { id++; return id.load(); } 但是我假设这个函数有可能返回相同的值两次,对吗?例如,线程A调用该函数,增...

35得票1回答
C++11中memory_order_acquire和memory_order_release的语义是什么?

http://en.cppreference.com/w/cpp/atomic/memory_order和其他C++11在线参考资料定义了memory_order_acquire和memory_order_release: Acquire操作:在此次加载之前,当前线程中没有读取可以被重新排...

35得票3回答
如何初始化一个静态std::atomic数据成员

我想以线程安全的方式为一个名为order的类生成标识符。下面的代码无法编译。我知道原子类型没有拷贝构造函数,我猜这就是为什么这段代码不起作用的原因。 有人知道如何让这段代码真正起作用吗?有其他替代方法吗? #include &lt;atomic&gt; #include &lt;iostr...

32得票2回答
为什么原子双精度没有完全实现?

我的问题很简单。为什么std::atomic&lt;double&gt;没有完全实现?我知道这与原子RMW(读取-修改-写入)访问有关。但我真的不明白,为什么在double上不能实现。 规定了任何平凡可复制类型都可以使用。当然,double也在其中。因此,C++11要求具备与任何类类型一起使...