linux2.6/include/asm-i386/atomic.h
文件內定義了原子類型atomic_t,其僅有壹個字段counter,用於保存32位的數據。
typedef struct { volatile int counter; } atomic_t;
其中原子操作函數atomic_inc完成自加原子操作。
/**
* atomic_inc - increment atomic variable
* @v: pointer of type atomic_t
*
* Atomically increments @v by 1.
*/
static __inline__ void atomic_inc(atomic_t *v)
{
__asm__ __volatile__(
LOCK "incl %0"
:"=m" (v->counter)
:"m" (v->counter));
}
其中LOCK宏的定義為。
#ifdef CONFIG_SMP
#define LOCK "lock ; "
#else
#define LOCK ""
#endif
可見,在對稱多處理器架構的情況下,LOCK被解釋為指令前綴lock。而對於單處理器架構,LOCK不包含任何內容。