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

假设这样一种场景,两个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);

上一篇:performclick()方法如何使用performclick
下一篇:中学武术开展现状问卷调查表

城乡居民对全科医生的信任度调查问卷

武术散打课对下沙大学生健身价值调查问卷表

历史博物馆叙事性展示对...

蚂蚁花呗对网络消费行为的影响调查问卷表

中小学生对学校课程满意度调查问卷

班级文化建设现状调查及...

班级文化建设现状调查及...

双子座近期桃花运,双子...

上海应复中心办公楼施工投标文件

检察机關司法會计工作的科學发展【3160字】

风险管理茬呼吸内科护理...

一般自我效能感量表(GSES)

关于白酒的调查问卷表

论新农村建设中农村基础设施的完善

由造纸黑液制备碳酸钙过程研究

水下纯方位系统目标跟踪算法研究

高光谱数据稀疏约束分类识别技术研究