1、读写自旋锁
rwlock
读写自旋锁(rwlock)是一种比自旋锁粒度更小的自旋锁机制,它保留了“自旋”的概念。
但是在写操作方面,只能最多有一个写进程,在读方面,同时可拥有多个执行单元,当然读和写也不能同时进行。
一句话:防写不防读
write_lock_irqsave(lock,flags);//写者获取读写锁,同时保存中断标志,并禁止本地中断
write_unlock_irqstore(lock,flags);
2、信号量
读写信号量是一种比信号量颗粒大的互斥机制,允许读之间并发执行,写之间不能并发,防写不防读。
信号量是可能引起阻塞
down_write(&sem); //写时获取信号量
...... //临界区代码up_write(&sem); //写时释放信号量
void down_write(struct rw_semaphore* rw_sem); //获取写信号量
int down_write_trylock(struct rw_semaphore* rw_sem);//尝试获取写信号量
void up_write(struct rw_semaphore* rw_sem); //释放写信号量