Linux内核原语(一)——汇总
小狼@http://blog.csdn.net/xiaolangyangyang
并发与竞争类型 | 操作函数与宏 | |
1.每CPU变量 | DEFINE_PER_CPU(type,name) | |
per_cpu(name,cpu) | ||
__get_cpu_var(name) | ||
get_cpu_var(name) | ||
put_cpu_var(name) | ||
alloc_percpu(type) | ||
free_percpu(pointer) | ||
per_cpu_ptr(pointer,cpu) | ||
2.原子操作 | 原子操作 | atomic_read(v) |
atomic_set(v,i) | ||
atomic_add(i,v) | ||
atomic_sub(i,v) | ||
atomic_sub_and_test(i,v) | ||
atomic_inc(v) | ||
atomic_dec(v) | ||
atomic_dec_and_test(v) | ||
atomic_inc_and_test(v) | ||
atomic_add_negative(i,v) | ||
atomic_inc_return(v) | ||
atomic_dec_return(v) | ||
atomic_add_return(i,v) | ||
atomic_sub_return(i,v) | ||
atomic_clear_mask(mask,addr) | ||
atomic_set_mask(mask,addr) | ||
原子位操作 | test_bit(nr,addr) | |
set_bit(nr,addr) | ||
clear_bit(nr,addr) | ||
change_bit(nr,addr) | ||
test_and_set_bit(nr,addr) | ||
test_and_clear_bit(nr,addr) | ||
test_and_change_bit(nr,addr) | ||
3.内存屏障 | mb() | |
rmb() | ||
wmb() | ||
smp_mb() | ||
smp_rmb() | ||
smp_wmp() | ||
4.自旋锁 | 自旋锁 | spin_lock_init() |
spin_lock() | ||
spin_lock_irqsave() | ||
spin_lock_irq() | ||
spin_lock_bh() | ||
spin_trylock() | ||
spin_trylock_bh() | ||
spin_unlock() | ||
spin_unlock_irqrestore() | ||
spin_unlock_irq() | ||
spin_unlock_bh() | ||
读写者自旋锁 | rwlock_init() | |
read_unlock_bh() | ||
read_unlock_irq() | ||
read_unlock() | ||
read_unlock_irqrestore() | ||
read_lock_bh() | ||
read_lock_irq() | ||
read_lock_irqsave() | ||
read_lock() | ||
write_trylock() | ||
write_unlock() | ||
write_unlock_irqrestore() | ||
write_unlock_irq() | ||
write_unlock_bh() | ||
write_lock() | ||
write_lock_irqsave() | ||
write_lock_irq() | ||
write_lock_bh() | ||
5.信号量(旗标) | 信号量 | sema_init() |
DECLARE_MUTEX(name) | ||
DECLARE_MUTEX_LOCKED(name) | ||
init_MUTEX(struct semaphore *sem) | ||
init_MUTEX_LOCKED(struct semaphore *sem) | ||
down(struct semaphore *sem) | ||
down_interruptible(struct semaphore *sem) | ||
down_trylock(struct semaphore *sem) | ||
up(struct semaphore *sem) | ||
读写者信号量 | init_rwsem() | |
down_read() | ||
down_read_trylock() | ||
up_read() | ||
down_write() | ||
down_write_trylock() | ||
up_write() | ||
downgrade_write() | ||
6.顺序锁 | seqlock_init(x) | |
DEFINE_SEQLOCK(x) | ||
写操作 | write_seqlock(seqlock_t* sl) | |
write_tryseqlock(seqlock_t* sl) | ||
write_seqlock_irqsave(lock, flags) | ||
write_seqlock_irq(lock) | ||
write_seqlock_bh(lock) | ||
write_sequnlock(seqlock_t* sl) | ||
write_sequnlock_irqrestore(lock, flags) | ||
write_sequnlock_irq(lock) | ||
write_sequnlock_bh(lock) | ||
读操作 | read_seqbegin(const seqlock_t* sl) | |
read_seqbegin_irqsave(lock, flags) | ||
read_seqretry(const seqlock_t* sl, unsigned start) | ||
read_seqretry_irqrestore(lock, iv, flags) | ||
7.完成量 | init_completion(&my_completion) | |
DECLARE_COMPLETION(my_completion) | ||
wait_for_completion() | ||
complete() | ||
INIT_COMPLETION() | ||
complete_all() | ||
complete_and_exit() | ||
8.互斥体 | mutex_init(&my_mutex) | |
mutex_lock(struct mutex* lock) | ||
mutex_lock_interruptible(struct mutex* lock) | ||
mutex_trylock(struct mutex* lock) | ||
mutex_unlock(struct mutex* lock) | ||
mutex_is_locked(struct mutex* lock) | ||
mutex_lock_interruptible(struct mutex* lock) | ||
mutex_lock_killable(struct mutex* lock) | ||
9.本地中断的禁止 (中断操作) | local_irq_disable(void) | |
10.本地软中断的禁止(软中断操作) | local_bh_disable(void) | |
11.RCU |