原子变量是无锁的吗?

当我们谈论原子变量时,比如C++11的atomic&lt&燃气轮机,是否无锁?或者说无锁是另一回事?如果我使用原子变量管理队列,它会比无锁队列慢吗

该标准没有指定原子对象是否无锁。在不为类型t提供无锁原子操作的平台上,atomic<T&gt对象可以使用互斥锁实现,而互斥锁不是无锁的。在这种情况下,在实现中使用这些对象的任何容器也不会是无锁的

该标准确实提供了一种检查原子<T&gt变量是无锁的:您可以使用var.is\u lock\u free()atomic\u is\u lock\u free(&var)。对于给定的程序执行,这些函数保证始终为相同类型的T返回相同的值。对于基本类型,如int,还提供了宏(例如ATOMIC\u int\u LOCK\u FREE),用于指定对该类型的无锁原子访问是否可用

发表评论