美文网首页
c++11 atomic

c++11 atomic

作者: bailongxian | 来源:发表于2020-03-24 21:14 被阅读0次

c++11 atomic中的6种 momey order
memory_order_relaxed: 只提供对单个atomic变量的原子读/写,不和前后语句有任何memory order的约束关系. 一般只用来做普通计数器,引用计数都不能做。可能导致别打cpu看不到最新的数据变化而产生错误的虚构行为。

memory_order_release memory_order_consume:thread A 对变量x release。thread B 对变量x consume。那么thread A对依赖x所有的写操作,对thread B依赖x的读操作都收可见的。

memory_order_release memory_order_acquire: thread A 执行release, thread B执行acquire。那么thread A 在release之前的所有写操作,对thread B acquire后任何读操作,都是可见的。
即 release执行的操作 不能reorder到release之后。acquire 之后的操作,不能reorder到acquire之前。

memory_order_acq_rel:是memory_order_acquire和memory_order_release的合并,这条语句前后的语句都不能被reorder

memory_order_seq_cst :比memory_order_acq_rel更加严格的顺序保证,memory_order_seq_cst执行完毕后,所有其cpu都是确保可以看到之前修改的最新数据的。如果前面的几个memory order模式允许有缓冲存在的话,memory_order_seq_cst指令执行后则保证真正写入内存。一个普通的读就可以看到由memory_order_seq_cst修改的数据,而memory_order_acquire则需要由memory_order_release配合才能看到,否则什么时候一个普通的load能看到memory_order_release修改的数据是不保证的。

x86的memory order是一种strong memory order,它保证:

LoadLoad是顺序的
一个cpu上前后两条load指令是顺序执行的,前面一条没执行完毕,后面一条不能执行
StoreStore是顺序的
一个cpu上前后两条store指令是顺序执行的,前面一条没执行完毕,后面一条不能执行
LoadStore
一个cpu上前面一条是Load指令,这条指令没执行完毕,后面一条store不能执行
x86不保证StoreLoad的顺序,一条Store指令在前,后面一条不相关的load指令可以先执行。因为这个顺序的不保证,导致Peterson lock实际上需要使用mfence指令才能在x86上实现

相关文章

  • C+++ 多线程

    C++11线程编程的内容 thread、mutux、atomic、condition_variable、uniqu...

  • 内存模型,顺序一致性

    对于同步,c++11添加了几个原子类型,类型如下atomic_xxx(atomic_int等),对于一般的线程之间...

  • c++11 atomic

    c++11 atomic中的6种 momey ordermemory_order_relaxed: 只提供对单个a...

  • C++ 11 atomic类型以及其memory_order介绍

    C++ 11 atomic 简介 Atomic类型是c++11里面引入的一种类型,它规定了当程序的多个线程同时访问...

  • 内存顺序

    这是从C++11中引深而来的,在C++11标准库中提供了atomic的原子操作。而其中函数参数中有一项是用于指定内...

  • c++11 std::atomic

    std::atomic为C++11封装的原子数据类型。 什么是原子数据类型? 从功能上看,简单地说,原子数据类型不...

  • 原子类型与原子操作

    原子类型 c++11提供了原子操作类型, 模板类std::atomic。头文件#include 内存模型 在原子类...

  • 原子变量

    C++11 提供了一个原子类型std::atomic 。使用原子变量就不用锁了,因为本来就是互斥访问. 使用...

  • C++11多线程-内存模型

    我们在前面讲atomic时,每一个原子操作都有一个std::memory_order参数。这个参数就是C++11的...

  • c++11 多线程(3)atomic 总结

    接着上节 mutex,本节主要介绍atomic的内容,练习代码地址。本文参考http://www.cplusplu...

网友评论

      本文标题:c++11 atomic

      本文链接:https://www.haomeiwen.com/subject/ckbayhtx.html