[发明专利]一种读写锁优化方法、装置、系统及存储介质在审
| 申请号: | 201911408539.X | 申请日: | 2019-12-31 |
| 公开(公告)号: | CN111143080A | 公开(公告)日: | 2020-05-12 |
| 发明(设计)人: | 娄婷 | 申请(专利权)人: | 联想(北京)有限公司 |
| 主分类号: | G06F9/52 | 分类号: | G06F9/52 |
| 代理公司: | 北京乐知新创知识产权代理事务所(普通合伙) 11734 | 代理人: | 江宇 |
| 地址: | 100085 北京市海淀*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 读写 优化 方法 装置 系统 存储 介质 | ||
本发明公开了一种读写锁优化方法、装置、系统及存储介质。首先,由待调度队列接收所有加锁请求,即包括读锁请求也包括写锁请求,并按照读锁优先的原则将加锁请求有序地插入到待调度队列中,使得读锁请求都排在写锁请求之前,这样确保读锁能被优先处理,且保证了原有读写锁方法的特点和优势;之后,在满足指定条件下,将待调度队列中的加锁请求全部按原有顺序移动到待执行队列中,并依据读写锁方法依次对待执行队列中的加锁请求进行处理,这样可以使得之前位于待调度队列中的所有加锁请求都能得到处理,而不至于出现写锁请求被长期阻塞得不到处理的情况。
技术领域
本发明涉及读写锁领域,尤其涉及一种读写锁优化方法、装置、系统及存储介质。
背景技术
对于多个线程共享同一个资源的时候,多个线程同时对共享资源做读操作是不会发生线程安全性问题的,但是一旦有一个线程对共享数据做写操作其他的线程再来读写共享资源的话,就会发生数据安全性问题,所以出现了读写锁。读写锁允许多个线程同时获取读锁,但有一个线程获取写锁之后其他线程都会进入等待队列进行等待。读写锁特别适用于绝大多数情况下是读只有少数情况是写的场景中,而且是维护数据的一致性关键解决技术。
目前,标准库中的读写锁是一种机会锁。一旦某个线程获取了读锁,则在该线程释放读锁之前到达的其他线程的读锁申请都会自动获取读锁形成一个读锁队列,仅当该读锁队列中的线程操作全部完成时,该读锁才会被释放,需要进行写操作的线程才有机会获取写锁。
在这种情况下会存在以下问题:假设A线程已经持有读锁,B线程申请了写锁,此时如果一直不断有线程申请读锁,则B线程可能会长时间处于等待状态,甚至成为“死锁”。
发明内容
针对以上问题,本发明人创造性地提供一种读写锁优化方法、装置、系统及存储介质。
根据本发明实施例第一方面,提供一种读写锁优化方法,该方法包括:接收加锁请求,加锁请求包括读锁请求和写锁请求;依据读锁优先的原则将加锁请求有序地插入到待调度队列中,使得读锁请求都排在写锁请求之前;在满足指定条件下,将待调度队列中的加锁请求全部按原有顺序移动到待执行队列中;依据读写锁方法依次对待执行队列中的加锁请求进行处理。
根据本发明一实施方式,其中,在接收加锁请求之前,该方法还包括:建立待调度队列并进行初始化;建立待执行队列并进行初始化;创建读写锁数据结构并进行初始化,数据结构包括指向待调度队列的指针、指向待执行队列的指针、待调度队列中读锁的请求个数、待调度队列中写锁的请求个数、待执行队列中读锁的请求个数、待执行队列中写锁的请求个数和指向当前执行加锁请求的指针。
根据本发明一实施方式,其中,依据读锁优先的原则将加锁请求有序地插入到待调度队列中,包括:根据加锁请求的类型为加锁请求设置优先级,其中,若加锁请求为加读锁的请求,则为加锁请求设置数值为负的优先级,若加锁请求为加写锁的请求,则为加锁请求设置数值为正的优先级,优先级的绝对值为加锁请求的线程标识号;依照优先级由小至大的排序方法将加锁请求有序地插入到待调度队列中。
根据本发明一实施方式,其中,在满足指定条件下,将待调度队列中的加锁请求全部按原有顺序移动到待执行队列中,包括:在间隔指定的时间片后,将待调度队列中的加锁请求全部按原有顺序移动到待执行队列中。
根据本发明一实施方式,其中,在满足指定条件下,将待调度队列中的加锁请求全部按原有顺序移动到待执行队列中包括:在待执行队列的加锁请求变为零时,将待调度队列中的加锁请求全部按原有顺序移动到待执行队列中。
根据本发明实施例第二方面,提供一种读写锁优化装置,该装置包括:接收模块,用于接收加锁请求,加锁请求包括读锁请求和写锁请求;插入模块,用于依据读锁优先的原则将加锁请求有序地插入到待调度队列中,使得读锁请求都排在写锁请求之前;移动模块,用于在满足指定条件下,将待调度队列中的加锁请求全部按原有顺序移动到待执行队列中;读写锁处理模块,用于依据读写锁方法依次对待执行队列中的加锁请求进行处理。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于联想(北京)有限公司,未经联想(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911408539.X/2.html,转载请声明来源钻瓜专利网。





