第5章 C++内存模型和原子类型操作

本章主要内容

※ C++11内存模型详解

※ 标准库提供的原子类型 使用各种原子类型

※ 原子操作实现线程同步功能

C++11标准中,有一个十分重要特性,常被程序员们所忽略。它不是一个新的语法特性,也不 是新的工具,它就是新的多线程(感知)内存模型。内存模型没有明确的定义基本部件应该如何 工作的话,之前介绍的那些工具就无法正常工作。那为什么大多数程序员都没有注意到它 呢?当你使用互斥量保护你的数据和条件变量,或者是“期望”上的信号事件时,对于互斥量为 什么能起到这样作用,大多数人不会去关心。只有当你试图去“接触硬件”,你才能详尽的了解 到内存模型是如何起作用的。

C++是一个系统级别的编程语言,标准委员会的目标之一就是不需要比C++还要底层的高级语 言。C++应该向程序员提供足够的灵活性,无障碍的去做他们想要做的事情;当需要的时候, 可以让他们“接触硬件”。原子类型和原子操作就允许他们“接触硬件”,并提供底层级别的同步 操作,通常会将常规指令数缩减到1~2个CPU指令。

在本章,我们将讨论内存模型的基本知识,而后再了解一下原子类型和操作,最后了解与原 子类型操作相关的各种同步。这个过程可能会比较复杂:如果你已经打算使用原子操作(比 如,第7章的无锁数据结构)同步你的代码,那么你就没有必要了解过多的细节。

现在让我们轻松愉快的来看一下有关内存模型的基本知识。

第5章 C++内存模型和原子类型操作相关推荐

  1. C++内存模型和原子类型操作

    C++内存模型和原子类型操作 std::memory_order初探 动态内存模型可以理解为存储一致性模型,主要是从行为上来看多个线程对同一个对象读写操作时所做的约束,动态内存理解起来会有少许复杂,涉 ...

  2. 【JVM】第四章 Java内存模型

    第四章 Java内存模型 文章目录 第四章 Java内存模型 一.物理机的并发问题 1.硬件的效率问题 2.缓存一致性问题 3.代码乱序执行优化问题 二.Java 内存模型 1.概念 2.Java 内 ...

  3. Java并发编程 - 第三章 Java内存模型

    前言: Java 线程之间的通信对程序员完全透明,内存可见性问题很容易困扰 Java 程序员,本章将揭开 Java 内存模型神秘的面纱. 一.Java 内存模型的基础 1.1 并发编程模型的两个关键问 ...

  4. java并发编程实战:第十六章----Java内存模型

    一.什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中 编译器中生成的指令顺序,可以与源代码中的顺 ...

  5. Java内存模型 - 同步八种操作

    Java 内存模型 - 同步操作与规则 Java内存模型 - 同步八种操作 锁定(lock): 作用于主内存中的变量,将他标记为一个线程独享变量. 通常意义上的上锁,就是一个线程正在使用时,其他线程必 ...

  6. 《Java并发编程的艺术》第3章 Java内存模型

    3.1.1 Java并发模型的两个关键问题 并发编程中,两个关键问题:线程通信以及线程同步 这里的线程是并发执行的活动实体. 通信是指线程以何种机制交换消息.机制有两种:共享内存(写读内存中的状态隐式 ...

  7. 深入理解Java虚拟机——第十二章——Java内存模型与线程

    硬件效率与一致性 处理器需要与内存交互,但处理器运算速度与对内存的I/O操作速度相差几个数量级,因此现代操作系统不得不加入尽可能接近处理器运算速度的高速缓存来作为内存与处理器之前的缓冲.这样处理器就不 ...

  8. 并发之初章Java内存模型

    >>>>>>博客地址<<<<<< >>>>>>首发博客<<<<< ...

  9. JVM之Java内存模型(基于《深入理解Java虚拟机》之第12章Java内存模型与线程)(上)

    多任务处理为什么在OS中几乎是一项必备的功能? sadsa sadsa①.计算机的运算能力强大了,但其运算速度与它的存储和 通信子系统的速度 差距太大了,不匹配,大量的时间都花费在磁盘I/O.网络通信 ...

最新文章

  1. 开源 免费 java CMS - FreeCMS1.5-信息管理
  2. mysql一个索引占用G_mysql 索引 使用注意细节
  3. js的parseInt() map(),reduce()方法详解
  4. android清空frame,android – GLSurfaceView onDrawFrame清除行为
  5. asp.net中gridview 如果字数太多可以用此方法把字体变短+.....
  6. html5canvas简单画图
  7. toString 方法
  8. 海归|94年的高校女博导,自曝曾两次想退学,如今获国家60万资助!
  9. 再见,你已经不再是程序员了
  10. ThreadLocal分析学习
  11. C#_delegate EndInvoke
  12. 网络编程在线英英词典之注册模块实现(三)
  13. 获取取本月一号、本月月末 日期
  14. Echarts legend组件 图例默认选中状态
  15. QT QPushbutton制作下拉列表
  16. 各种小芯片Chiplet的机遇
  17. 一周学会linux实战笔记
  18. ERP软件厂商排名?ERP管理软件厂商怎么选?
  19. DaVinci Resolve Studio 17 Mac 达芬奇剪辑调色软件
  20. Android学习系列(1)--为App签名(为apk签名)

热门文章

  1. pop错误 找不到服务器,POP3 连接事务失败 - 找不到客户端访问服务器
  2. Qt窗口部件——对话框QDialog
  3. 业绩快报|Facebook Q4营收净利润亮眼,利好影响盘后股价大涨12%
  4. android 跨进程 android:process,Android跨进程通信技术-多进程模式的运行机制
  5. 前台html基础标签7.6
  6. html5开发桌面程序调用dll,使用Visual Studio开发Html5应用
  7. 设计模式学习每天一个——Decorator模式
  8. SQL基础--gt; 约束(CONSTRAINT)
  9. 浅析C#中new、override、virtual关键字的区别
  10. n维数组的操作-04-p2