getfromcode

硬件内存模型和C++内存模型

测试运维
课程简介

导读:硬件内存模型与C++内存模型直击并发调试痛点 在并发编程中,开发者常遭遇难以复现的逻辑错误,根源往往不在业务代码,而在于硬件缓存一致性延迟与编译器指令重排带来的内存可见性问题。本课聚焦硬件内存模型与C++内存模型的底层交互,解析数据竞争的本质,帮助测试与运维领域的开发者从“调不通”的并发问题中定位根因,不再被晦涩的内存屏障术语绕晕。 适合什么基础 具…

已有 20 人浏览 发布 2025-12-20 更新 2026-09-25

导读:硬件内存模型与C++内存模型直击并发调试痛点

在并发编程中,开发者常遭遇难以复现的逻辑错误,根源往往不在业务代码,而在于硬件缓存一致性延迟与编译器指令重排带来的内存可见性问题。本课聚焦硬件内存模型与C++内存模型的底层交互,解析数据竞争的本质,帮助测试与运维领域的开发者从“调不通”的并发问题中定位根因,不再被晦涩的内存屏障术语绕晕。

适合什么基础

具备C/C++基础,了解基本的进程与线程概念,有初步并发编程经验即可。无需精通操作系统内核,但需能看懂简单的多线程代码,有实际调试并发问题的需求。

建议先看哪几块

  • 进程与线程的底层机制:理解执行栈与堆的分离,以及线程间内存分配的差异。
  • 数据竞争的成因与表现:剖析非原子变量在多核环境下的竞态条件,理解为何看似正确的代码会输出错误结果。
  • 原子操作与锁机制:掌握内存屏障的作用,理解编译器重排与硬件缓存的交互规则。

学完能独立做什么

能够独立定位并发测试中的数据竞争问题,编写正确的原子操作与锁代码,理解不同编译器与硬件平台下的内存模型差异,从而在性能测试或系统级调试中准确判断瓶颈来源。

资料怎么配合练习

建议边看视频边动手实践:先搭建多线程测试用例,用工具检测竞争现象,再对照课程内容分析根因;最后尝试用原子操作与锁重构代码,观察行为变化,将理论转化为可复用的调试经验。

【资源目录】:

└──{1}–课程
| ├──{1}–课程内容及相关说明
| | └──[1.1]–课程内容及相关说明_ev.mp4 25.29M
| ├──{2}–进程和线程
| | ├──[2.1]–认识进程和线程_ev.mp4 12.23M
| | ├──[2.2]–C语言对线程的支持_ev.mp4 33.66M
| | ├──[2.3]–C语言编译器的选择_ev.mp4 17.52M
| | ├──[2.4]–用C标准库函数创建线程_ev.mp4 43.64M
| | └──[2.5]–并行和并发_ev.mp4 13.31M
| ├──{3}–数据竞争
| | ├──[3.1]–多线程数据竞争的例子_ev.mp4 31.48M
| | └──[3.2]–数据竞争是如何产生的_ev.mp4 37.32M
| ├──{4}–原子操作和锁
| | ├──[4.1]–原子操作和原子变量_ev.mp4 16.40M
| | ├──[4.2]–互斥锁_ev.mp4 26.98M
| | ├──[4.3]–执行原子操作的机器指令_ev.mp4 16.79M
| | ├──[4.4]–用机器指令实现原子操作的例子_ev.mp4 18.61M
| | └──[4.5]–用机器指令实现互斥锁的例子_ev.mp4 25.39M
| ├──{5}–线程通信及相关问题
| | ├──[5.1]–一个线程间通信的例子_ev.mp4 15.52M
| | ├──[5.2]–编译优化和指令重排_ev.mp4 19.39M
| | └──[5.3]–原子操作的神奇效应_ev.mp4 12.98M
| ├──{6}–流水线、乱序执行和缓存
| | ├──[6.1]–什么是编排顺序_ev.mp4 12.27M
| | ├──[6.2]–流水线_ev.mp4 20.43M
| | ├──[6.3]–乱序执行_ev.mp4 13.35M
| | ├──[6.4]–指令的执行和引退_ev.mp4 15.87M
| | ├──[6.5]–存写缓冲器_ev.mp4 23.00M
| | └──[6.6]–缓存_ev.mp4 17.30M
| ├──{7}–硬件内存模型
| | ├──[7.10]–x86-tso的访存次序(一)_ev.mp4 34.62M
| | ├──[7.11]–x86-tso的访存次序(二)_ev.mp4 13.23M
| | ├──[7.12]–x86-tso的访存次序(三)_ev.mp4 18.62M
| | ├──[7.13]–x86-tso的访存次序(四)_ev.mp4 19.91M
| | ├──[7.14]–x86-tso的访存次序(五)_ev.mp4 29.71M
| | ├──[7.15]–x86-tso的访存次序(六)_ev.mp4 18.56M
| | ├──[7.16]–x86访存次序的总结_ev.mp4 10.98M
| | ├──[7.17]–多处理器和缓存一致性_ev.mp4 12.09M
| | ├──[7.18]–MESI协议_ev.mp4 20.41M
| | ├──[7.19]–MESI协议的状态转化_ev.mp4 21.71M
| | ├──[7.1]–多处理器系统和顺序一致性_ev.mp4 27.85M
| | ├──[7.20]–arm/power的访存次序(一)_ev.mp4 13.12M
| | ├──[7.21]–arm/power的访存次序(二)_ev.mp4 20.11M
| | ├──[7.22]–arm/power的访存次序(三)_ev.mp4 15.17M
| | ├──[7.23]–arm/power的访存次序(四)_ev.mp4 12.60M
| | ├──[7.24]–如何阻止指令重排_ev.mp4 16.80M
| | ├──[7.25]–避免数据竞争的顺序一致性_ev.mp4 22.42M
| | ├──[7.26]–x86平台上的同步操作指令_ev.mp4 12.30M
| | ├──[7.27]–SC-DRF的实例_ev.mp4 25.75M
| | ├──[7.28]–特别练习7-2_ev.mp4 2.59M
| | ├──[7.2]–顺序一致的执行_ev.mp4 29.26M
| | ├──[7.3]–特别练习7-1_ev.mp4 4.09M
| | ├──[7.4]–顺序一致性模型的访存次序_ev.mp4 21.69M
| | ├──[7.5]–偏序和全序_ev.mp4 11.65M
| | ├──[7.6]–顺序一致性存在单一全序_ev.mp4 19.66M
| | ├──[7.7]–x86处理器的指令重排_ev.mp4 15.60M
| | ├──[7.8]–x86处理器上的存全序TSO_ev.mp4 12.35M
| | └──[7.9]–x86的内存屏障指令MFENCE_ev.mp4 13.99M
| └──{8}–C/C++内存模型
| | ├──[8.10]–原子操作库_ev.mp4 37.73M
| | ├──[8.11]–一个多线程数据竞争的例子_ev.mp4 14.75M
| | ├──[8.12]–用原子操作解决数据竞争的例子_ev.mp4 21.93M
| | ├──[8.13]–C/C内存模型的核心思想_ev.mp4 9.74M
| | ├──[8.14]–原子操作的附加属性(同步和访存次序)_ev.mp4 16.80M
| | ├──[8.15]–通过原子操作施加指定的访存次序_ev.mp4 17.80M
| | ├──[8.16]–通过原子操作施加内存同步_ev.mp4 21.32M
| | ├──[8.17]–前发_ev.mp4 10.26M
| | ├──[8.18]–同步操作及其分类_ev.mp4 18.51M
| | ├──[8.19]–原子操作的线程间同步_ev.mp4 31.67M
| | ├──[8.1]–C/C
内存模型简介_ev.mp4 13.06M
| | ├──[8.20]–依赖前序_ev.mp4 33.33M
| | ├──[8.21]–线程间前发_ev.mp4 12.95M
| | ├──[8.22]–可见副作用_ev.mp4 24.48M
| | ├──[8.23]–再论前序和前发_ev.mp4 16.85M
| | ├──[8.24]–松散的原子操作_ev.mp4 17.91M
| | ├──[8.25]–原子变量的修改次序_ev.mp4 18.94M
| | ├──[8.26]–原子操作的一致性规则_ev.mp4 26.89M
| | ├──[8.27]–顺序一致性的原子操作_ev.mp4 15.24M
| | ├──[8.28]–实例解析一_ev.mp4 18.82M
| | ├──[8.29]–实例解析二_ev.mp4 12.59M
| | ├──[8.2]–C语言的表达式_ev.mp4 20.40M
| | ├──[8.30]–实例解析三_ev.mp4 14.88M
| | ├──[8.31]–实例解析四_ev.mp4 12.33M
| | ├──[8.32]–实例解析五_ev.mp4 18.69M
| | ├──[8.33]–实例解析六_ev.mp4 26.76M
| | ├──[8.34]–对原子操作函数的附加说明_ev.mp4 15.82M
| | ├──[8.35]–C语言对原子类型的支持:存取的顺序一致性语义_ev.mp4 26.71M
| | ├──[8.36]–C语言对原子类型的支持:复合赋值的顺序一致性语义_ev.mp4 20.52M
| | ├──[8.37]–C语言对原子类型的支持:递增和递减的顺序一致性语义_ev.mp4 24.07M
| | ├──[8.38]–C语言对原子类型的支持:不使用标准库函数的线程同步_ev.mp4 8.94M
| | ├──[8.3]–表达式的例子_ev.mp4 15.90M
| | ├──[8.4]–表达式的功能_ev.mp4 19.35M
| | ├──[8.5]–求值、值计算和副作用_ev.mp4 22.19M
| | ├──[8.6]–前序、后序和序列点_ev.mp4 18.84M
| | ├──[8.7]–特别练习8-1_ev.mp4 4.06M
| | ├──[8.8]–无序和不确定顺序_ev.mp4 16.38M
| | └──[8.9]–冲突和数据竞争_ev.mp4 20.63M

课程目录

{1}--课程内容及相关说明
[1.1]--课程内容及相关说明_ev.mp4
{2}--进程和线程
[2.1]--认识进程和线程_ev.mp4
[2.2]--C语言对线程的支持_ev.mp4
[2.3]--C语言编译器的选择_ev.mp4
[2.4]--用C标准库函数创建线程_ev.mp4
[2.5]--骞惰鍜屽苟鍙慱ev.mp4
{3}--数据竞争
[3.1]--多线程数据竞争的例子_ev.mp4
[3.2]--数据竞争是如何产生的_ev.mp4
{4}--原子操作和锁
[4.1]--原子操作和原子变量_ev.mp4
[4.3]--执行原子操作的机器指令_ev.mp4
[4.4]--用机器指令实现原子操作的例子_ev.mp4
[4.5]--用机器指令实现互斥锁的例子_ev.mp4
{5}--线程通信及相关问题
[5.1]--一个线程间通信的例子_ev.mp4
[5.2]--编译优化和指令重排_ev.mp4
[5.3]--原子操作的神奇效应_ev.mp4
{6}--流水线、乱序执行和缓存
[6.1]--什么是编排顺序_ev.mp4
[6.4]--指令的执行和引退_ev.mp4
[6.5]--瀛樺啓缂撳啿鍣╛ev.mp4
{7}--硬件内存模型
[7.10]--x86-tso的访存次序(一)_ev.mp4
[7.11]--x86-tso的访存次序(二)_ev.mp4
[7.12]--x86-tso的访存次序(三)_ev.mp4
[7.13]--x86-tso的访存次序(四)_ev.mp4
[7.14]--x86-tso的访存次序(五)_ev.mp4
[7.15]--x86-tso的访存次序(六)_ev.mp4
[7.16]--x86访存次序的总结_ev.mp4
[7.17]--多处理器和缓存一致性_ev.mp4
[7.19]--MESI协议的状态转化_ev.mp4
[7.1]--多处理器系统和顺序一致性_ev.mp4
[7.20]--arm/power的访存次序(一)_ev.mp4
[7.21]--arm/power的访存次序(二)_ev.mp4
[7.22]--arm/power的访存次序(三)_ev.mp4
[7.23]--arm/power的访存次序(四)_ev.mp4
[7.24]--如何阻止指令重排_ev.mp4
[7.25]--避免数据竞争的顺序一致性_ev.mp4
[7.26]--x86平台上的同步操作指令_ev.mp4
[7.28]--鐗瑰埆缁冧範7-2_ev.mp4
[7.2]--顺序一致的执行_ev.mp4
[7.3]--鐗瑰埆缁冧範7-1_ev.mp4
[7.4]--顺序一致性模型的访存次序_ev.mp4
[7.5]--鍋忓簭鍜屽叏搴廮ev.mp4
[7.6]--顺序一致性存在单一全序_ev.mp4
[7.7]--x86处理器的指令重排_ev.mp4
[7.8]--x86处理器上的存全序TSO_ev.mp4
[7.9]--x86的内存屏障指令MFENCE_ev.mp4
{8}--C/C++内存模型
[8.10]--鍘熷瓙鎿嶄綔搴揰ev.mp4
[8.11]--一个多线程数据竞争的例子_ev.mp4
[8.12]--用原子操作解决数据竞争的例子_ev.mp4
[8.13]--C/C++内存模型的核心思想_ev.mp4
[8.14]--原子操作的附加属性(同步和访存次序)_ev.mp4
[8.15]--通过原子操作施加指定的访存次序_ev.mp4
[8.16]--通过原子操作施加内存同步_ev.mp4
[8.18]--同步操作及其分类_ev.mp4
[8.19]--原子操作的线程间同步_ev.mp4
[8.1]--C/C++内存模型简介_ev.mp4
[8.20]--渚濊禆鍓嶅簭_ev.mp4
[8.23]--再论前序和前发_ev.mp4
[8.24]--松散的原子操作_ev.mp4
[8.25]--原子变量的修改次序_ev.mp4
[8.26]--原子操作的一致性规则_ev.mp4
[8.27]--顺序一致性的原子操作_ev.mp4
[8.28]--瀹炰緥瑙f瀽涓€_ev.mp4
[8.29]--瀹炰緥瑙f瀽浜宊ev.mp4
[8.2]--C语言的表达式_ev.mp4
[8.30]--瀹炰緥瑙f瀽涓塤ev.mp4
[8.31]--瀹炰緥瑙f瀽鍥沖ev.mp4
[8.32]--瀹炰緥瑙f瀽浜擾ev.mp4
[8.33]--瀹炰緥瑙f瀽鍏璤ev.mp4
[8.34]--对原子操作函数的附加说明_ev.mp4
[8.35]--C语言对原子类型的支持:存取的顺序一致性语义_ev.mp4
[8.36]--C语言对原子类型的支持:复合赋值的顺序一致性语义_ev.mp4
[8.37]--C语言对原子类型的支持:递增和递减的顺序一致性语义_ev.mp4
[8.38]--C语言对原子类型的支持:不使用标准库函数的线程同步_ev.mp4
[8.3]--表达式的例子_ev.mp4
[8.4]--表达式的功能_ev.mp4
[8.5]--求值、值计算和副作用_ev.mp4
[8.6]--前序、后序和序列点_ev.mp4
[8.7]--鐗瑰埆缁冧範8-1_ev.mp4
[8.8]--无序和不确定顺序_ev.mp4
[8.9]--冲突和数据竞争_ev.mp4
课程购买
课程价格
金币29
290金币限时优惠会员免费
销量:0
💎 开通会员每日免费下载,比单买更划算 →
支付成功后会自动显示下载资源云盘的链接!点击链接即可下载到本地。