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

asm volatile("incl %0":"+r"(b));是原子操作么。。。

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

    本文导语:  本帖最后由 xiaowai0219 于 2010-07-02 13:40:23 编辑 asm volatile("incl %0":"+r"(b)); 请问这个是原子操作么?如果不是,那么要怎么改呢? ps:反汇编生成的对应的代码如下: movl _b, %eax /APP incl %eax /NO_APP movl %eax, _b ...

本帖最后由 xiaowai0219 于 2010-07-02 13:40:23 编辑
asm volatile("incl %0":"+r"(b));

请问这个是原子操作么?如果不是,那么要怎么改呢?
ps:反汇编生成的对应的代码如下:
movl _b, %eax
/APP
incl %eax
/NO_APP
movl %eax, _b

|
X86下是这样定义的,
arch/x86/include/asm/alternative.h
#ifdef CONFIG_SMP
#define LOCK_PREFIX 
                ".section .smp_locks,"a"n"   
                _ASM_ALIGN "n"                 
                _ASM_PTR "661fn" /* address */ 
                ".previousn"                   
                "661:ntlock; "

#else /* ! CONFIG_SMP */
#define LOCK_PREFIX ""
#endif


用的时候这么弄
static inline void atomic_add(int i, atomic_t *v) 
{
        asm volatile(LOCK_PREFIX "addl %1,%0"
                     : "+m" (v->counter)
                     : "ir" (i));
}


|
atomic_inc()

|
LOCK 好象是条汇编指令,可以锁住系统数据总线,锁了总线当然就变成原操作了

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • /usr/include/asm/目录,其中asm代表什么意思???
  • 关于_asm_宏定义的问题
  • Java 字节码操纵框架 ASM
  • asm文件夹在那里?
  • CentOS 5.5 找不到asm/atomic.h的问题
  • 介绍本好的asm的教材
  • inline asm問題
  • expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘typedef'
  • 包含<asm/semaphore.h>后编译通不过???
  • oracle中fdisk导致的ASM磁盘数据丢失的解决方法
  • asm/atomic.h 头文件的问题
  • 在Linux下怎么编译.asm文件?
  • error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
  • error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘. '
  • Oracle ASM自动管理存储管理简介
  • 'asm' operand has impossible constraints
  • 找不到asm/hardware.h在哪个目录,怎么办?
  • 为什么在我的引导程序setup.asm里,初始化8253定时器后,程序不能往下运行,而取消初始化后能???
  • Oracle ASM环境下怎么进行数据库冷备
  • asm.js


  • 站内导航:


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

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

    浙ICP备11055608号-3