atomic_t
読み:アトミック-アンダースコア-ティー
外語:atomic_t
Linuxカーネルで提供されているアトミック変数の変数型。
定義
linux/linux/types.hにおいて定義されている。
typedef struct {
int counter;
} atomic_t;
64ビット環境ではatomic64_tも定義されるが、CPUごとに定義が異なる。変数型もlongだったり、long longだったり、u64だったりする。
特徴
使用方法
atomic_t型はint型変数一つを含むstructのtypedefとして定義される。
従って、使用する際はatomic_tを通常の変数型のように使用し、アトミック変数を宣言して用いることになる。
atomic_t var;
アトミック変数は宣言しただけでは初期化されないため、初期化する必要がある。
宣言時に初期化するには、ATOMIC_INITマクロを用いる。ATOMIC_INITマクロは、arch/arm/include/asm/atomic.h で定義されている。
#define ATOMIC_INIT(i) { (i) }
従って、次のようにして宣言すれば、宣言時点で初期化される。
atomic_t var = ATOMIC_INIT(0);
または、atomic_set関数を用いて初期化することもできる。
関数とマクロ
例えば、Android(ARM)用の実装では、次のような関数やマクロがある。
関数
関数はすべてstaticのinline関数である。
- atomic_add
- atomic_add_return
- atomic_sub
- atomic_sub_return
- atomic_cmpxchg
- atomic_clear_mask
- __atomic_add_unless
マクロ
- atomic_read
- atomic_set
- atomic_xchg
- atomic_inc
- atomic_dec
- atomic_inc_and_test
- atomic_dec_and_test
- atomic_inc_return
- atomic_dec_return
- atomic_sub_and_test
- atomic_add_negative
- smp_mb__before_atomic_dec
- smp_mb__after_atomic_dec
- smp_mb__before_atomic_inc
- smp_mb__after_atomic_inc
再検索