互斥锁
DEFINE_MUTEX 静态定义和初始化一个互斥锁,static DEFINE_MUTEX(fsl_ifc_nand_mutex);
mutex_init 动态初始化一个互斥锁,mutex_init(&ecc->lock);
mutex_lock 加锁,阻塞引起睡眠,不能被中断,mutex_lock(&bch->lock);
mutex_lock_interruptible 阻塞引起睡眠,不能被中断,mutex_lock_interruptible(&ecc->lock);
mutex_unlock 解锁,mutex_unlock(&ecc->lock);
自旋锁
spin_lock_init 初始化自旋锁x,spin_lock_init(x);
spin_lock 加锁,不会引起阻塞和睡眠
spin_trylock 尽力获得自旋锁,如果能立即获得锁,并返回真,否则不能获得锁,立即返回假
spin_unlock 释放自旋锁
信号量
static DEFINE_SEMAPHORE(console_sem);
sema_init 初始化设置信号量的初值,sema_init(&console_sem, 1);
down 获得信号量sem,引起睡眠,因此不能在中断上下文,判断sem大于0,减1继续运行,否则挂起等待信号量,down(&console_sem);
down_interruptible 可被信号中断;
down_trylock 获得信号量失败马上返回,不会引起睡眠;
up 释放信号量sem,把sem的值加1,up(&console_sem);
读写信号量
init_rwsem
down_read
down_write
up_read
up_write
还有更多的其他方式,待发现。。。