*参照元 [#u0e9614e] #backlinks *説明 [#k5e0ccd1] -パス: [[linux-2.6.33/arch/x86/include/asm/spinlock.h]] -FIXME: arch_read_trylock() の x86 版です。 **引数 [#sf8940fb] -arch_rwlock_t *lock --ロックを試みる rwlock --[[linux-2.6.33/arch_rwlock_t]] **返り値 [#qf0a2cd6] -int --ロックに成功したら 0 以外、失敗したら 0 **参考 [#v48e2e8f] *実装 [#qca2293a] static inline int arch_read_trylock(arch_rwlock_t *lock) { atomic_t *count = (atomic_t *)lock; -arch_rwlock_t と atomic_t は宣言が違うが、 サイズが同じなので、キャストしている?? --[[linux-2.6.33/atomic_t]] if (atomic_dec_return(count) >= 0) return 1; -アトミックに 1減らしてみて、0以上だったらロックできている、成功を返す。 --[[linux-2.6.33/atomic_dec_return()]] atomic_inc(count); -だめだったら 1増やす(つまり元に戻す)、失敗を返す。 --[[linux-2.6.33/atomic_inc()]] return 0; } *コメント [#xd0bb015]