Linux内核原语(一)——汇总
小狼@http://blog.youkuaiyun.com/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 | ||
本文详细介绍了Linux内核中的各种同步机制,包括每CPU变量、原子操作、内存屏障、自旋锁、信号量、顺序锁、完成量、互斥体等,并提供了相应的操作函数与宏。
862

被折叠的 条评论
为什么被折叠?



