linux内核同步机制之读写自旋锁

定义:

读写自旋锁(rwlock)是一种比自旋锁粒度更小的自旋锁机制,它保留了“自旋”的概念。

但是在写操作方面,只能最多有一个写进程,在读方面,同时可拥有多个执行单元,当然读和写也不能同时进行。

一句话:防写不防读

理解推荐: http://blog.sina.com.cn/s/blog_6d7fa49b01014q86.html

操作:

定义于

#include<linux/spinlock.h>

rwlock_t x;               

rwlock_init(&x);    //动态初始化

rwlock_t x=RW_LOCK_UNLOCKED;    //静态初始化 



void read_lock(rwlock_t *lock);    //如果不能获得,它将自旋,直到获得该读写锁

void read_unlock(rwlock_t *lock);

在对共享资源进行读取之前,应该先调用读锁定函数锁定共享资源,完成之后再调用读解锁函数释放共享资源

void write_lock(rwlock_t *lock);    //如果不能获得,它将自旋,直到获得该读写锁

void write_unlock(rwlock_t *lock);

在对共享资源进行写操作之前,应该先调用写锁定函数锁定共享资源,完成之后再调用写解锁函数释放共享资源


read_trylock(lock);

write_trylock(lock);



read_lock_irq(lock);    //读者获取读写锁,并禁止本地中断

read_unlock_irq(lock);    //读者释放读写锁,并使能本地中断



write_lock_irq(lock);//写者获取读写锁,并禁止本地中断

write_unlock_irq(lock);



read_lock_irqsave(lock, flags);//读者获取读写锁,同时保存中断标志,并禁止本地中断

read_unlock_irqrestores(lock,flags);//读者释放读写锁,同时恢复中断标志,并使能本地中断



write_lock_irqsave(lock,flags);//写者获取读写锁,同时保存中断标志,并禁止本地中断

write_unlock_irqstore(lock,flags);



read_lock_bh(lock);//读者获取读写锁,并禁止本地软中断

read_unlock_bh(lock);



write_lock_bh(lock);//写者获取读写锁,并禁止本地软中断

write_unlock_bh(lock);

用例:

rwlock_t lock;     //定义rwlock

rwlock_init(&lock);    //初始化rwlock



//读时获取锁

read_lock(&lock);

...临界区...

read_unlock(&lock);



 //写时获取锁

write_lock_irqsave(&lock, flags);

…临界区...

write_unlock_irqrestore(&lock, flags);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值