Linux kernel locking - 1 - atomic
續前篇 同步問題
https://www.kernel.org/doc/html/latest/kernel-hacking/locking.html
之前介紹的 atomic:
- 從 spinlock 到 atomic 到 ameba
- Linux tasklet interrupt mode
基本的 atomic functions 有:
ATOMIC_INIT(i)
atomic_read(v)
atomic_set(v, i)
atomic_add(i, v)
atomic_sub(i, v)
atomic_inc(v)
atomic_dec(v)
進階的 RMW (read modified write) 有
atomic_sub_and_test(i, v)
atomic_dec_and_test(v)
atomic_inc_and_test(v)
atomic_add_negative(v)
atomic_add_return(i, v)
atomic_sub_return(i, v)
atomic_fetch_add(i, v)
atomic_fetch_sub(i, v)
atomic_cmpxchg(v, old, new)
atomic_xchg(v, new)
PS: _test : 如果是 0 時 return true
PS: _negative : 如果是 negative 時 return true
64bit 系統時, 會有 atomic64_t, 一般 atomic_t 是 32 bit, 而 atomic_long_t 是 64 bit
bitwise operations
set_bit() 用的就是 atomic_long_or (atomic64_or) 其他還有
clear_bit() / change_bit() / test_and_set_bit() / test_and_clear_bit() / test_and_change_bit()
留言
張貼留言