首页 > 后端开发 > C++ > std::atomic<> 中的原子对象是什么?

std::atomic<> 中的原子对象是什么?

Linda Hamilton
发布: 2024-11-10 16:33:02
原创
517 人浏览过

What is an Atomic Object in  std::atomic<>? 
“/>?

std::atomic<>中什么是原子对象?

std::atomic<>模板提供了一个可以并发的类型由多个线程操作,不会引发未定义的行为。

原子性std::atomic

std::atomic<>的每个实例都表示一个原子类型,允许不同线程对其实例进行同时操作,与常规 C 对象不同,原子对象确保。独占访问其数据,防止数据竞争。

原子操作

对原子对象执行的操作本质上是原子的,这意味着:

  • 保证对原子对象状态的更改对所有线程可见。
  • 对原子对象的访问可以建立线程间同步并排序非原子内存

内存顺序和 std::atomic

std::atomic<> 提供对同步和内存顺序的精确控制。支持各种内存顺序选项,包括:

  • std::memory_order_relaxed:没有同步或排序保证。
  • std::memory_order_release:确保写入对获取相同原子变量的其他线程可见。
  • std::memory_order_acquire:确保在对同一原子变量执行释放操作后加载可见其他线程。
  • std::memory_order_seq_cst:在所有原子操作之间提供顺序一致性(总体全局排序)。

示例:算术运算

虽然=和等单个算术运算符是原子操作,但将它们分解为单独的加载、添加、并且存储操作可能不是原子的。例如:

此操作将涉及以下步骤:

  1. 加载 a 的值。
  2. 为其添加 12。
  3. 将结果存储回a。

步骤2和3是不是原子的,因此存在潜在的竞争条件,其中另一个线程可以修改添加和存储之间的 a。

基本算术运算的替代方法

对于典型用例涉及算术运算时,建议使用 std::atomic 中定义的等效重载运算符。这些运算符以原子方式执行整个操作,确保顺序一致性。

有关原子性和内存模型的其他资源

  • C 原子和内存排序
  • 比较:C 11 中的原子无锁编程与互斥体和RW 锁
  • C 11 引入了标准化内存模型。这是什么意思?它将如何影响 C 编程?
  • C 11 中的并发

以上是std::atomic<> 中的原子对象是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板