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()



留言

熱門文章