[LevelDB] 一步步剖析AtomicPointer

本文通过解析LevelDB中的AtomicPointer,探讨了乱序执行的概念,介绍了Memory Barrier的作用,旨在帮助读者理解多线程环境下原子操作的重要性。内容涵盖了CPU架构、编译器优化对执行顺序的影响以及Platform-Specific的AtomicPointer实现。
摘要由CSDN通过智能技术生成

AtomicPointer是LevelDB中的一个基础数据结构,其核心代码只有寥寥10来行。

但是,为了理解这10来行代码,却需要十分扎实的CPU架构、操作系统、编译器、C++11知识。

为了搞明白其背后的原理,同时加深理解,我准备从以下几点着手,一步步抽丝剥茧:

  • 什么是乱序执行 ?
  • 什么是Memory Barrier ?
  • Platform-Specific的AtomicPointer实现
  • C++11内存模型
  • C++11下的AtomicPointer实现

什么是乱序执行 ? 

常用的编程语言中,均提供了“顺序执行“的语义。

就是,单个执行流中的语句,我们总可以将其理解成“逐条执行”。

那么,“乱序执行”又从何谈起呢?

为了理解“乱序执行”,我们需要拨开高级语言的抽象,深入到计算机组成原理中。

 

以“x = 42”为例,其对应的汇编指令一般包含这几步操作:

1)从x的内存地址加载数据到内存中;

2)修改寄存器中的值;

3)将寄存器中的数据,回写到内存中;

因此,即便是简单的赋值操作,也可能不是Atomic操作(当然,这也取决于具体的CPU架构)。

 

赘述下就是,两条C语句在被编译成汇编指令时,产生远不止两条的汇

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值