菜单
  

    我们知道,当我们修改某一个变量的时候,在汇编层面看来,至少需要细分为“读->改->写”三个过程,也就是说,他们访问存储单元两次,第一次读原值,第二次写新值。

    假设这样一种场景,两个cpu同时对同一个存储器单元做“读->改->写”操作的话。首先,两个CPU都试图读同一个单元,但是存储器仲裁器(对访问RAM芯片的操作进行串行化的硬件电路)插手,只允许其中一个访问而不让另一个延迟,则这两个读操作会被串行化。当第一个读操作已经完成后,另一个CPU从存储器单元正好读到同一个(旧)值。然而,两个CPU都试图向那个存储器单元写一新值,总线存储器访问再一次被存储器总裁器串行化,最终,两个写操作都成功。但是,全局的结果是不对的,因为两个CPU写入同一(新)值。因此,这很容易导致意想不到的结果。

     

    所以,避免由于“读->改->写”指令引起的竞争条件的最容易的办法,就是确保这样的操作在芯片级是原子的。任何一个这样的操作都必须以单个指令执行,中断不能中断,且避免其他的CPU访问同一存储器单元。这些很小的原子操作可以建立在其他更灵活进制的基础之上以创建临界区。论文网

    在x86平台上,总的来说,CPU提供三种独立的原子锁机制:原子

    保证操作、加LOCK指令前缀和缓存一致性协议。

     

    概念理解

    原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作

    (atomic operation)意为“不可被中断的一个或一系列操作”。对原子操作的简单描述就是:多个线程执行一个操作时,其中任何一个线程要么

    完全执行完此操作,要么没有执行此操作的任何步骤,那么这个操作就

    是原子的。原子操作是其他内核同步方法的基石。

     

    api介绍

    atomic_read(v)         返回*V

    atomic_set(v, i)       把*v置成i

     

    atomic_add(i,v)        给*v增加i

    atomic_add_return(i,v) 把i加到*v,返回*V的新值

     

    atomic_sub(i, v)       从*v中减去i 

    atomic_sub_reurn(i,v)  从*v减i,返回*v的新值

    atomic_sub_and_test(i,v) 从*v中减去i,如果结果为0 则返回1;否则,返回0

     

    atomic_inc(v)            把1加到*v

    atomic_dec(v)              从*v减 1

    atomic_inc_return(v)     把1加到*v,返回*v新值

    atomic_dec_return(v)     从*v减1,返回* V的新值

     

    原子位操作

    test_bit(nr, addr)    返回*add的第nr位的值

    set_bit(nr,addr)      设置*addr的第nr位

    clear_bit(nr,addr)    清*addr的第nr位

    change_bit(nr, addr)     转换*addr的第nr位,并返回他的原值

    gcc提供的api

    type __sync_fetch_and_add (type *ptr, type value);

    type __sync_fetch_and_sub (type *ptr, type value);

    type __sync_fetch_and_or (type *ptr, type value);

    type __sync_fetch_and_and (type *ptr, type value);

    type __sync_fetch_and_xor (type *ptr, type value);

    type __sync_fetch_and_nand (type *ptr, type value);

    type __sync_add_and_fetch (type *ptr, type value);

    type __sync_sub_and_fetch (type *ptr, type value);

    type __sync_or_and_fetch (type *ptr, type value);

    type __sync_and_and_fetch (type *ptr, type value);

  1. 上一篇:performclick()方法如何使用performclick
  2. 下一篇:中学武术开展现状问卷调查表
  1. 高铁对游客行为影响问卷调查表

  2. 网络口碑对旅游者决策的影响研究调查问卷

  3. 游客对南京旅游景区厕所感知调查问卷

  4. 泰山山地旅游安全对游客...

  5. 游客对导游服务质量的满意程度调查问卷

  6. 促销方式对消费者购买意愿影响的调查问卷

  7. 大学生对于微博问政看法的调查问卷表

  8. 上市公司债务税盾文献综述和参考文献

  9. Bootstrap的OpenGL人体模型仿真

  10. 友谊质量调查问卷表

  11. PLC焊机电气控制系统设计开题报告

  12. 跨国企业全球营销策略的市场定位调查

  13. 淮安乐天玛特连锁超市4P营销策略分析

  14. MATLAB动车组列车牵引变流...

  15. PLC启闭机液压系统设计及其故障诊断

  16. 小学课堂教学效率国内外研究现状和参考文献

  17. 多智能体系统一致性问题研究

  

About

751论文网手机版...

主页:http://www.751com.cn

关闭返回