x86平台原子操作原理

原创 2015年11月18日 14:04:28

什么是原子操作?

任务切换采用中断机制触发,发生一次任务切换,就向处理器通知一次中断发生。

任务切换发生在指令边缘,一条指令在执行时,不会进行任务切换,在两条指令的间隙才可能会发生任务切换。

原子操作是不可中断的一系列操作。

为什么要原子操作?原子操作有什么意义?

对于软件,代码的行为必须确定的。
也就是说通过手动分析代码,也能预知运行结果。

但是程序在并发和并行的时候,
因为操作系统任务调度的不确定性和多处理器之间的相互影响,
让代码运行的结果没有办法预知。
这种情况下,强制保证某些指令的执行是原子操作,代码的运行结果才是可预知的,
原子操作是多任务操作系统的基础。
正确的使用原子操作,可以避免多任务导致的错误数据,
保证代码的运行符合预期。

操作系统提供的原子操作API的实现原理是什么样子的?

lock前缀指令的作用是独占总线,指令由处理器提供,软件无法实现,操作系统将lock指令封装成一系列原子操作的API给上层应用使用。
API诸如InterlockedCompareExchange、InterlockedCompareExchangePointer 、InterlockedDecrement 、InterlockedExchange 、InterlockedExchangePointer 、InterlockedIncrement和ExInterlockedCompareExchange64 。

原子操作是怎么实现的?

单处理器架构下:
先关中断;
然后执行一系列指令,执行时不发生切换;
最后开中断。

多处理器架构:
指令加lock前缀, intel x86,操作系统将lock前缀指令封装成多种原子操作API给应用使用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

c/c++原子锁应用(跨平台)

前言:今天在修改amf库时发现两个函数,InterlockedIncrement()、InterlockedDecrement(),查资料知道这是关于原子锁的,而这是windows下的系统函数,那么对...
  • jiangheng0535
  • jiangheng0535
  • 2015年01月10日 17:44
  • 1519

Java实现原子操作的原理

原子的定义: 原子(atomic)本意是"不能被进一步分割的最小粒子”,而原子操作描述为:“不可被中断的一个或一系列操作“。在多核处理器上实现原子操作就会变得复杂了许多。 原子操作的实现: 1.术语定...
  • liaodehong
  • liaodehong
  • 2016年07月18日 21:01
  • 2111

ARM与X86 CPU架构对比区别

ARM与X86 CPU架构对比区别CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。早期的CPU全部是CISC架构,它的设计目...
  • watermusicyes
  • watermusicyes
  • 2016年01月16日 09:38
  • 20521

x86平台读取cpu支持sse2指令集的代码,以及原子操作的代码

// This module gets enough CPU information to optimize the // atomicops module on x86. #include ...
  • hintonic
  • hintonic
  • 2014年01月16日 16:54
  • 920

x86和arm架构原子操作的区别

x86和arm在原子操作上有些差别,下面一代码的形式来说明区别: 首先比较单核:           由于x86是CISC指令集,允许在一条指令里进行两次内存操作,所以对i++,i__这些操作在单...
  • zhaohc_nj
  • zhaohc_nj
  • 2012年08月27日 10:11
  • 703

以下均是在X86平台下编辑,操作,运行

以下均是在X86平台下编辑,操作,运行 编写好驱动,通过挂载的方法将驱动程序挂载到内核里面,大致步骤如下: 一:  1>建立以.c为后缀的c语言程序文件 (里面包含了设备名及设备号等) ...
  • bobbat
  • bobbat
  • 2017年07月27日 13:22
  • 147

跨平台的原子操作及简单的循环锁实现

原子操作一直是多线程编程中的重要杀器之一。Win32里我们有Interlocked系列API,其他平台下也有各自的原子操作接口。如果想要让我们的程序能够拥有跨平台且统一的多线程调度方案,那么就必须得把...
  • markl22222
  • markl22222
  • 2013年08月28日 22:00
  • 2494

平台无关的高效原子操作:ACE_Atomic_Op

在软件开发中,我们经常会遇到多个线程对同一数据操作的同步问题,如果需要同步保护的是一组变量,则直接分用互斥锁进行保护,可以如果需要保护的只是一个整数(如:int,long...),则有更为高效的办法:...
  • zzusimon
  • zzusimon
  • 2011年08月15日 10:25
  • 2183

C++0x 内存模型和原子操作 (std:::atomic memory order等相关资料)

并行编程的趋势不可阻挡啊,新的c++标准也加入了很多支持。内存模型和 std::atomic 的引入很值得学习吧,看facebook的开源c++库都用了很多c++ 11的特性了。 std::atomi...
  • linuxheik
  • linuxheik
  • 2017年04月07日 17:18
  • 717

从小型机到x86:四川电信核心数据库迁移到虚拟化平台

【TechTarget中国原创】 从近两年开始,一场起源于国内某知名互联网企业的“去IOE(代指由IBM小型机、Oracle数据库和EMC高端存储为代表的封闭式高成本IT架构)”运动在国内引起了巨大反...
  • aaron8219
  • aaron8219
  • 2014年06月17日 16:26
  • 1232
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:x86平台原子操作原理
举报原因:
原因补充:

(最多只允许输入30个字)