当前位置:  技术问答>linux和unix

不理解为什么这样就是原子的操作了

    来源: 互联网  发布时间:2016-01-08

    本文导语:  在看linux代码情景分析的时钟中断的时候看到了这样的一句 (*(unsigned long)&jiffies)++; 书中作了解释,说与jiffies++ 相比来说cpu的执行周期几乎是相同的,但是前者被gcc编译成了对内存的inc指令,所以具有原子性? 我很...

在看linux代码情景分析的时钟中断的时候看到了这样的一句
(*(unsigned long)&jiffies)++;

书中作了解释,说与jiffies++ 相比来说cpu的执行周期几乎是相同的,但是前者被gcc编译成了对内存的inc指令,所以具有原子性?

我很不解, 对内存的访问并inc 也不是要分成很多指令来执行吗? 为什么会具有原子性呢?


|
在基于intel x86 CISC CPU的PC架构上对一个内存数据做INC操作是可以用一条指令直接完成的,所以用(*(unsigned long *)&jiffies)++的写法的确是原子的,而直接写jiffies++则是一个Read-Modify-Write back的由若干指令实现的非原子操作。
但如果是在RISC CPU平台上,访问内存和算数逻辑运算不能在一条指令实现。要实现该原子操作需要在其前后分别disable和enable中断以保证原子性。

|
inc指令的确可以直接操作内存,而无需先把数据读入寄存器。从这个角度说的确是原子操作。

但是不明白代码为什么写成c语言,而不是汇编语言。毕竟对c语言编译成汇编是依赖于编译器的。为什么gcc要把(*(unsigned long *)&jiffies)++变成单单一个inc指令,而jiffies++却要先读入寄存器那?又如何保证gcc的其他版本,或者其他编译器能正确编译那?

|
我想不管怎么样都应该是原子操作, jiffies++ 有一个寻址过程啊,但(*(unsigned long *)&jiffies)++就是地址直接操作了

|
这样的代码夸平台当然是有问题,你看的是什么版本的linux?估计是很老的版本吧?

    
 
 

您可能感兴趣的文章:

  • windows 系统是否是多用户操作系统,如何理解“多用户操作系统”的“多用户”?
  • 刚学操作系统,有个地方不理解,见笑了!
  • 宏操作_ _copy_user_zeroing()的代码怎么理解?
  • 《现代操作系统》和《深入理解计算机系统》
  • 我的理解有没有错,overrriding是参数必须不同,其它的必须相同,而overloading是参数不同外,存取操作符和返回类型可以不同,
  • Android开发之文件操作模式深入理解
  • 你们看是不是可以这样理解:在用来进行两个对象的比较时,==操作符用来比较两个对象的引用地址,而equals()用来比较两个对象的值。
  • 初学操作系统,对于fork()函数有多处不理解,拜求大家赐教
  • 深入理解链表的各类操作详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • DirectDraw:lpitch的理解
  • 分布式系统的故障独立性如何理解
  • 对TCP协议状态及状态转换理解
  • 套接字应该怎么理解
  • c/c++内存堆分配和栈分配理解
  • 如何理解fork函数返回2次啊?
  • 请问下面一句话应该怎样理解?
  • 句柄?句柄?“句柄”到底是什么东西?怎样理解?
  • unsigned char modeflags :5;是如何来理解?
  • 问一个《深入理解计算机系统》中的问题
  • 深度理解try{}cathc(){}
  • 深入理解PHP内核 TIPI
  • 求最容易理解,最容易上手的java书籍,servlet书籍,请指教,谢谢!!
  • 在JTree中的USEROBJECT有什么用处,我一直不理解?
  • 如何理解ResourceBundle和Locale?和应用的场合?谢谢
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • System.gc();怎么理解?
  • system.map文件的作用和理解
  • sembuf.sem_num到底如何理解?--初学者向各位请教
  • 如何准确理解“程序”、“进程”、“线程”这三个概念
  • makefile这句话应该则怎么理解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3