分类: LINUX
2014-12-30 14:33:59
内核同步机制
中断屏蔽、原子操作、自旋锁、信号量、互斥体、完成量completion
读写自旋锁、读写信号量、顺序锁
1、 自旋锁
Spinlock_t xxx;
Spin_lock_init(&xxx)
Spin_lock(&xxx)
Spin_unlock(&xxx)
读写自旋锁
Rwlock_t xxx;
Rwlock_init(&xxx)
Read_lock(&xxx)
Read_unlock(&xxx)
Write_lock(&xxx)
Write_unlock(&xxx)
注意:(1)锁占用时间很小的情况下使用;
(2)、避免死锁;
(3)、锁内,不能使用copy_from_user\copy_to_user\kmalloc\msleep等阻塞级\调度级的代码,因为发生内核抢占,抢占的进程 有可能又申请该锁,那么就变成死锁了。
2、 信号量
Struct semaphore xxx;
Sema_init(&xxx,val)-àinit_ MUTEX (&xxx)、init_ MUTEX_LOCKED (&xxx)
down(&xxx)
up(&xxx)
DECLEAR_MUTEX(xxx)
DECLEAR_MUTEX_LOCKED(xxx)
读写信号量
Struct rw_semaphore xxx
Init_rwsem(&xxx)
Down_read(&xxx)
up_read(&xxx)
Down_write(&xxx)
up_write(&xxx)
3、完成量completion
Struct completion xxx;
Init_completion(&xxx)
Wait_for_completion(&xxx)
complete(&xxx)
DECLEAR_COMPLETION(xxx)
4、 互斥体
Struct mutex xxx;
Mutex_init(&xxx)
Mutex_lock(&xxx)
Mutex_unlock(&xxx)