博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux并发控制之读写自旋锁
阅读量:7079 次
发布时间:2019-06-28

本文共 1322 字,大约阅读时间需要 4 分钟。

读写自旋锁(rwlock)是一种比自旋锁粒度更小的自旋锁机制,它保留了“自旋”的概念。
但是在写操作方面,只能最多有一个写进程,在读方面,同时可拥有多个执行单元,当然读和写也不能同时进行。
一句话:
防写不防读
 
理解推荐:
操作:
定义于#include<linux/rwlock.h>
或#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);

转载于:https://www.cnblogs.com/hehehaha/archive/2013/01/31/6332968.html

你可能感兴趣的文章
单页面路由工程使用微信分享及二次分享解决方案
查看>>
RESTful API 中的 Status code 是否要遵守规范
查看>>
Redis中的lru算法实现
查看>>
从手忙脚乱到袖手旁观:RPA对财务流程的颠覆
查看>>
Ant Design源码分析(三):Wave组件
查看>>
91. Decode Ways
查看>>
宜信 | 供应链金融+区块链双链合璧
查看>>
JS每日一题: 请简述一下vuex实现原理
查看>>
leetcode409.Longest Palindrome
查看>>
将军令:数据安全平台建设实践
查看>>
JavaScript原型与构造函数笔记
查看>>
220. Contains Duplicate III
查看>>
LeetCode36.有效的数独 JavaScript
查看>>
表单密码自动填充hack
查看>>
从零开始的无人驾驶 1
查看>>
DevOps自动化工具集合
查看>>
Android平台架构的介绍和源码下载
查看>>
前端 CSS : 5# 纯 CSS 实现24小时超市
查看>>
Linux中用户管理
查看>>
【译】为什么我更喜欢对象而不是switch语句
查看>>