1 Star 0 Fork 0

huyi / TechCPP

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
原子变量的内存序是什么?.md 1.54 KB
一键复制 编辑 原始数据 按行查看 历史
葛昆仑 提交于 2024-02-05 03:54 . update: 6 articles

在C++11及之后的标准中,为了给开发者提供更细粒度的控制以及可能的性能优化空间,引入了多种内存顺序选项:

  1. memory_order_relaxed:放松的内存顺序。不对执行顺序做任何保证,除了原子操作本身的原子性。这意味着,在没有其他同步操作手段的情况下,读写操作的顺序可能与程序代码中的顺序不一致。
  2. memory_order_consume:较轻量级的保序需求,用于指定操作依赖于先前的某些操作结果。这在实际实现中通常被视为与memory_order_acquire相同。
  3. memory_order_acquire:获取操作,禁止后续的读或写被重排到当前操作之前。用于读取操作。
  4. memory_order_release:释放操作,防止之前的读或写操作被重排到当前操作之后。用于写入操作。
  5. memory_order_acq_rel:同时包含获取和释放语义。适用于同时具有读取和写入特性的操作。
  6. memory_order_seq_cst:顺序一致性内存顺序。所有线程看到的操作顺序一致。这是默认的内存顺序,并且提供了最强的顺序保证。

内存顺序的选择影响着程序的正确性和性能。较弱的内存顺序(例如memory_order_relaxed)可能带来更好的性能,因为它们允许更多的指令重排序;但是,使用它们也需要更小心地设计程序,以避免数据竞争和其他并发相关的错误。相反,memory_order_seq_cst提供了最简单和最直观的并发模型,但可能因为额外的同步代价而影响性能。

1
https://gitee.com/hylhm/TechCPP.git
git@gitee.com:hylhm/TechCPP.git
hylhm
TechCPP
TechCPP
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891