当前位置: 技术问答>linux和unix
linux原子操作的疑惑
来源: 互联网 发布时间:2016-05-06
本文导语: 内核源码的includeasm-x86atomic.h中有这样的代码: typedef struct { int counter; } atomic_t; #define ATOMIC_INIT(i) { (i) } #define atomic_read(v) ((v)->counter) #define atomic_set(v,i) (((v)->counter) = (i)) 。。。 但是atomic_set和atomic_read都是...
内核源码的includeasm-x86atomic.h中有这样的代码:
typedef struct { int counter; } atomic_t;
#define ATOMIC_INIT(i) { (i) }
#define atomic_read(v) ((v)->counter)
#define atomic_set(v,i) (((v)->counter) = (i))
。。。
但是atomic_set和atomic_read都是直接存取的,如何保证其原子性呢?
typedef struct { int counter; } atomic_t;
#define ATOMIC_INIT(i) { (i) }
#define atomic_read(v) ((v)->counter)
#define atomic_set(v,i) (((v)->counter) = (i))
。。。
但是atomic_set和atomic_read都是直接存取的,如何保证其原子性呢?
|
http://blog.csdn.net/gothicane/archive/2006/08/06/1028606.aspx
http://blog.csdn.net/colorant/archive/2007/04/24/1580847.aspx
http://blog.csdn.net/colorant/archive/2007/04/24/1580847.aspx
|
编译器保证的,无论是读或写一个INT型变量时,都是一条指令完成,当然,这是在单CPU情况下,如果存在多CPU的情况,还需要锁住总线以防止同一个内存被多个CPU同时读写