G06F3/06
1.一种基于Linux的读写锁优化方法,其特征在于,所述方法包括:
接收加读锁申请或加写锁申请,并判断读写锁之前是否处于被申请状态;
当判定所述读写锁没有处于被申请状态时,直接处理所述加读锁申请或 所述加写锁申请,使读者获得读锁进入临界区操作或者使写者获得写锁进入 临界区操作;
当所述读写锁处于被申请状态并且已经被占用时,将接收到的所述加读 锁申请加入预设的读等待队列中,并更新所述rwlock结构体中记录的所述读 等待队列中的读最高优先级;或者,将接收到的所述写读锁申请加入预设的 写等待队列中,并更新所述rwlock结构体中记录的所述写等待队列中的写最 高优先级;
当被占用的所述读写锁被释放时,判断所述读等待队列中是否已有加读 锁申请等待以及所述写等待队列中是否已有加写锁申请等待;根据判断结果 和所述rwlock结构体中记录的所述读最高优先级以及所述写最高优先级,处 理所述读等待队列中的所述加读锁申请以及所述写等待队列中的所述加写锁 申请。
2.如权利要求1所述的优化方法,其特征在于,
所述更新所述rwlock结构体中记录的所述读等待队列中的读最高优先 级包括:
比较接收到的所述加读锁申请的优先级是否高于所述rwlock结构体中 预记录的所述读等待队列中先前存在的加读锁申请的读最高优先级,当接收 到的所述加读锁申请的优先级高于所述读等待队列中先前存在的加读锁申请 的读最高优先级时,更新所述rwlock结构体中记录的所述读等待队列中的读 最高优先级,或者,当所述读等待队列中仅有接收到的所述加读锁申请时, 将接收到的所述加读锁申请的优先级作为所述读最高优先级并记录在所述 rwlock结构体中。
3.如权利要求1所述的优化方法,其特征在于,
所述更新所述rwlock结构体中记录的所述写等待队列中的写最高优先 级包括:
比较接收到的所述写读锁申请的优先级是否高于所述rwlock结构体中 预记录的所述写等待队列中先前存在的加写锁申请的写最高优先级,当接收 到的所述加写锁申请的优先级高于所述写等待队列中先前存在的加写锁申请 的写最高优先级时,更新所述rwlock结构体中记录的所述写等待队列中的写 最高优先级,或者,当所述写等待队列中仅有接收到的所述加写锁申请时, 将接收到的所述加写锁申请的优先级作为所述写最高优先级并记录在所述 rwlock结构体中。
4.如权利要求1所述的优化方法,其特征在于,所述根据判断结果和所 述rwlock结构体中记录的所述读最高优先级以及所述写最高优先级,处理所 述读等待队列中的所述加读锁申请以及所述写等待队列中的所述加写锁申请 包括:
当判定所述读等待队列中已有所述加读锁申请等待并且所述写等待队列 中已有所述加写锁申请等待时,比较所述rwlock结构体中记录的所述读最高 优先级和所述写最高优先级;当所述读最高优先级高于所述写最高优先级时, 优先处理所述加读锁申请;当所述写最高优先级高于所述读最高优先级时, 优先处理所述加写锁申请;
当判定所述读等待队列中已有所述加读锁申请等待,所述写等待队列中 没有所述加写锁申请等待时,直接处理所述读等待队列中的所述加读锁申请;
当判定所述写等待队列中已有所述加写锁申请等待,所述读等待队列中 没有所述加读锁申请等待时,直接处理所述写等待队列中的所述加写锁申请。
5.如权利要求1所述的优化方法,其特征在于,所述方法还包括:
在根据所述判断结果和所述rwlock结构体中记录的所述读最高优先级 以及所述写最高优先级,处理所述读等待队列中的所述加读锁申请以及所述 写等待队列中的所述加写锁申请之前,判断被释放的是读锁还是写锁;
当被释放的是读锁时,将记录的当前持有所述读锁的读者的个数减一, 并判断减一之后持有所述读锁的读者的个数是否为零;当减一之后持有所述 读锁的读者的个数为零时,根据所述判断结果和所述rwlock结构体中记录的 所述读最高优先级以及所述写最高优先级,处理所述读等待队列中的所述加 读锁申请以及所述写等待队列中的所述加写锁申请;当减一之后持有所述读 锁的读者的个数不为零时,继续等待当前持有所述读锁的读者释放所述读锁;
当被释放的是写锁时,直接根据所述判断结果和所述rwlock结构体中记 录的所述读最高优先级以及所述写最高优先级,处理所述读等待队列中的所 述加读锁申请以及所述写等待队列中的所述加写锁申请。
6.一种基于Linux的读写锁优化系统,其特征在于,所述系统包括:判 断模块、处理模块和更新模块;
所述判断模块,用于接收加读锁申请或加写锁申请,并判断读写锁之前 是否处于被申请状态;
所述处理模块,用于当判定所述读写锁没有处于被申请状态时,直接处 理所述加读锁申请或所述加写锁申请,使读者获得读锁进入临界区操作或者 使写者获得写锁进入临界区操作;
所述更新模块,用于当所述读写锁处于被申请状态并且已经被占用时, 将接收到的所述加读锁申请加入预设的读等待队列中,并更新所述rwlock结 构体中记录的所述读等待队列中的读最高优先级;或者,将接收到的所述写 读锁申请加入预设的写等待队列中,并更新所述rwlock结构体中记录的所述 写等待队列中的写最高优先级;
所述处理模块,还用于当被占用的所述读写锁被释放时,判断所述读等 待队列中是否已有加读锁申请等待以及所述写等待队列中是否已有加写锁申 请等待;根据判断结果和所述rwlock结构体中记录的所述读最高优先级以及 所述写最高优先级,处理所述读等待队列中的所述加读锁申请以及所述写等 待队列中的所述加写锁申请。
7.如权利要求6所述的优化系统,其特征在于,
所述更新模块更新所述rwlock结构体中记录的所述读等待队列中的读 最高优先级包括:
比较接收到的所述加读锁申请的优先级是否高于所述rwlock结构体中 预记录的所述读等待队列中先前存在的加读锁申请的读最高优先级,当接收 到的所述加读锁申请的优先级高于所述读等待队列中先前存在的加读锁申请 的读最高优先级时,更新所述rwlock结构体中记录的所述读等待队列中的读 最高优先级,或者,当所述读等待队列中仅有接收到的所述加读锁申请时, 将接收到的所述加读锁申请的优先级作为所述读最高优先级并记录在所述 rwlock结构体中。
8.如权利要求6所述的优化系统,其特征在于,
所述更新模块更新所述rwlock结构体中记录的所述写等待队列中的写 最高优先级包括:
比较接收到的所述写读锁申请的优先级是否高于所述rwlock结构体中 预记录的所述写等待队列中先前存在的加写锁申请的写最高优先级,当接收 到的所述加写锁申请的优先级高于所述写等待队列中先前存在的加写锁申请 的写最高优先级时,更新所述rwlock结构体中记录的所述写等待队列中的写 最高优先级,或者,当所述写等待队列中仅有接收到的所述加写锁申请时, 将接收到的所述加写锁申请的优先级作为所述写最高优先级并记录在所述 rwlock结构体中。
9.如权利要求6所述的优化系统,其特征在于,所述处理模块根据判断 结果和所述rwlock结构体中记录的所述读最高优先级以及所述写最高优先 级,处理所述读等待队列中的所述加读锁申请以及所述写等待队列中的所述 加写锁申请包括:
当判定所述读等待队列中已有所述加读锁申请等待并且所述写等待队列 中已有所述加写锁申请等待时,比较所述rwlock结构体中记录的所述读最高 优先级和所述写最高优先级;当所述读最高优先级高于所述写最高优先级时, 优先处理所述加读锁申请;当所述写最高优先级高于所述读最高优先级时, 优先处理所述加写锁申请;
当判定所述读等待队列中已有所述加读锁申请等待,所述写等待队列中 没有所述加写锁申请等待时,直接处理所述读等待队列中的所述加读锁申请;
当判定所述写等待队列中已有所述加写锁申请等待,所述读等待队列中 没有所述加读锁申请等待时,直接处理所述写等待队列中的所述加写锁申请。
10.如权利要求6所述的优化系统,其特征在于,所述处理模块还用于:
在根据所述判断结果和所述rwlock结构体中记录的所述读最高优先级 以及所述写最高优先级,处理所述读等待队列中的所述加读锁申请以及所述 写等待队列中的所述加写锁申请之前,判断被释放的是读锁还是写锁;
当被释放的是读锁时,将记录的当前持有所述读锁的读者的个数减一, 并判断减一之后持有所述读锁的读者的个数是否为零;当减一之后持有所述 读锁的读者的个数为零时,根据所述判断结果和所述rwlock结构体中记录的 所述读最高优先级以及所述写最高优先级,处理所述读等待队列中的所述加 读锁申请以及所述写等待队列中的所述加写锁申请;当减一之后持有所述读 锁的读者的个数不为零时,继续等待当前持有所述读锁的读者释放所述读锁;
当被释放的是写锁时,直接根据所述判断结果和所述rwlock结构体中记 录的所述读最高优先级以及所述写最高优先级,处理所述读等待队列中的所 述加读锁申请以及所述写等待队列中的所述加写锁申请。
本发明涉及操作系统设计领域,具体涉及一种基于Linux的读写锁优化 方法和系统。
在linux下有两种实现数据互斥的基本机制,包括了信号量(Semaphore) 和自旋锁(Spinlock)。由于互斥的特点,使用自旋锁的代码毫无线程并发 性可言,多处理器系统的性能受到限制。读写自旋锁(Reader-WriterSpinlock) 将线程区分为读者和写者,多个读者可以被允许同时访问共享资源,共享资 源在一个时间段内只能被一个写者访问,申请线程在等待期内依然使用忙等 待方式。
Linux目前可以配置读写锁是读优先或写优先两种模式,默认读写锁是 读优先的,如果有写者在等待锁,不会阻塞读者。如果配置为写优先,如果 有写者在等待锁,所有的后续的读者加锁都会阻塞。但是当占有读者锁的读 者数为0时,当有写者在等待时,会优先唤醒写者。但是这两种配置方式都 会出现读者或者写者饿死的情况,当配置为读者优先时,会出现写者饿死的 情况,而当配置为写者优先时,会出现读者饿死的情况。
为了解决上述问题,本发明提出了一种基于Linux的读写锁优化方法和 系统,能够减少或者避免读者或者写者饿死的情况,提高了系统的资源利用 率和系统并行处理性能。
为了达到上述目的,本发明提出了一种基于Linux的加读写锁的优化方 法,该方法包括:
接收加读锁申请或加写锁申请,并判断读写锁之前是否处于被申请状
态。
当判定读写锁没有处于被申请状态时,直接处理加读锁申请或加写锁申 请,使读者获得读锁进入临界区操作或者使写者获得写锁进入临界区操作。
当读写锁处于被申请状态并且已经被占用时,将接收到的加读锁申请加 入预设的读等待队列中,并更新rwlock结构体中记录的读等待队列中的读最 高优先级;或者,将接收到的写读锁申请加入预设的写等待队列中,并更新 rwlock结构体中记录的写等待队列中的写最高优先级。
当被占用的读写锁被释放时,判断读等待队列中是否已有加读锁申请等 待以及写等待队列中是否已有加写锁申请等待;根据判断结果和rwlock结构 体中记录的读最高优先级以及写最高优先级,处理读等待队列中的加读锁申 请以及写等待队列中的加写锁申请。
优选地,
更新rwlock结构体中记录的读等待队列中的读最高优先级包括:
比较接收到的加读锁申请的优先级是否高于rwlock结构体中预记录的 读等待队列中先前存在的加读锁申请的读最高优先级,当接收到的加读锁申 请的优先级高于读等待队列中先前存在的加读锁申请的读最高优先级时,更 新rwlock结构体中记录的读等待队列中的读最高优先级,或者,当读等待队 列中仅有接收到的加读锁申请时,将接收到的加读锁申请的优先级作为读最 高优先级并记录在rwlock结构体中。
优选地,
更新rwlock结构体中记录的写等待队列中的写最高优先级包括:
比较接收到的写读锁申请的优先级是否高于rwlock结构体中预记录的 写等待队列中先前存在的加写锁申请的写最高优先级,当接收到的加写锁申 请的优先级高于写等待队列中先前存在的加写锁申请的写最高优先级时,更 新rwlock结构体中记录的写等待队列中的写最高优先级,或者,当写等待队 列中仅有接收到的加写锁申请时,将接收到的加写锁申请的优先级作为写最 高优先级并记录在rwlock结构体中。
优选地,根据判断结果和rwlock结构体中记录的读最高优先级以及写最 高优先级,处理读等待队列中的加读锁申请以及写等待队列中的加写锁申请 包括:
当判定读等待队列中已有加读锁申请等待并且写等待队列中已有加写锁 申请等待时,比较rwlock结构体中记录的读最高优先级和写最高优先级;当 读最高优先级高于写最高优先级时,优先处理加读锁申请;当写最高优先级 高于读最高优先级时,优先处理加写锁申请。
当判定读等待队列中已有加读锁申请等待,写等待队列中没有加写锁申 请等待时,直接处理读等待队列中的加读锁申请。
当判定写等待队列中已有加写锁申请等待,读等待队列中没有加读锁申 请等待时,直接处理写等待队列中的加写锁申请。
优选地,该方法还包括:
在根据判断结果和rwlock结构体中记录的读最高优先级以及写最高优 先级,处理读等待队列中的加读锁申请以及写等待队列中的加写锁申请之前, 判断被释放的是读锁还是写锁。
当被释放的是读锁时,将记录的当前持有读锁的读者的个数减一,并判 断减一之后持有读锁的读者的个数是否为零;当减一之后持有读锁的读者的 个数为零时,根据判断结果和rwlock结构体中记录的读最高优先级以及写最 高优先级,处理读等待队列中的加读锁申请以及写等待队列中的所述加写锁 申请;当减一之后持有读锁的读者的个数不为零时,继续等待当前持有读锁 的读者释放读锁。
当被释放的是写锁时,直接根据判断结果和rwlock结构体中记录的读最 高优先级以及写最高优先级,处理读等待队列中的加读锁申请以及写等待队 列中的加写锁申请。
为了达到上述目的,本发明还提出了一种基于Linux的加读写锁的优化 系统,该系统包括:判断模块、处理模块和更新模块。
判断模块,用于接收加读锁申请或加写锁申请,并判断读写锁之前是否 处于被申请状态。
处理模块,用于当判定读写锁没有处于被申请状态时,直接处理加读锁 申请或加写锁申请,使读者获得读锁进入临界区操作或者使写者获得写锁进 入临界区操作。
更新模块,用于当读写锁处于被申请状态并且已经被占用时,将接收到 的加读锁申请加入预设的读等待队列中,并更新rwlock结构体中记录的读等 待队列中的读最高优先级;或者,将接收到的写读锁申请加入预设的写等待 队列中,并更新rwlock结构体中记录的写等待队列中的写最高优先级。
处理模块,还用于当被占用的读写锁被释放时,判断读等待队列中是否 已有加读锁申请等待以及写等待队列中是否已有加写锁申请等待;根据判断 结果和rwlock结构体中记录的读最高优先级以及写最高优先级,处理读等待 队列中的加读锁申请以及写等待队列中的加写锁申请。
优选地,
更新模块更新rwlock结构体中记录的读等待队列中的读最高优先级包 括:
比较接收到的加读锁申请的优先级是否高于rwlock结构体中预记录的 读等待队列中先前存在的加读锁申请的读最高优先级,当接收到的加读锁申 请的优先级高于读等待队列中先前存在的加读锁申请的读最高优先级时,更 新rwlock结构体中记录的读等待队列中的读最高优先级,或者,当读等待队 列中仅有接收到的加读锁申请时,将接收到的加读锁申请的优先级作为读最 高优先级并记录在rwlock结构体中。
优选地,
更新模块更新rwlock结构体中记录的写等待队列中的写最高优先级包 括:
比较接收到的写读锁申请的优先级是否高于rwlock结构体中预记录的 写等待队列中先前存在的加写锁申请的写最高优先级,当接收到的加写锁申 请的优先级高于写等待队列中先前存在的加写锁申请的写最高优先级时,更 新rwlock结构体中记录的写等待队列中的写最高优先级,或者,当写等待队 列中仅有接收到的加写锁申请时,将接收到的加写锁申请的优先级作为写最 高优先级并记录在rwlock结构体中。
优选地,处理模块根据判断结果和rwlock结构体中记录的读最高优先级 以及写最高优先级,处理读等待队列中的加读锁申请以及写等待队列中的加 写锁申请包括:
当判定读等待队列中已有加读锁申请等待并且写等待队列中已有加写锁 申请等待时,比较rwlock结构体中记录的读最高优先级和写最高优先级;当 读最高优先级高于写最高优先级时,优先处理加读锁申请;当写最高优先级 高于读最高优先级时,优先处理加写锁申请。
当判定读等待队列中已有加读锁申请等待,写等待队列中没有加写锁申 请等待时,直接处理读等待队列中的加读锁申请。
当判定写等待队列中已有加写锁申请等待,读等待队列中没有加读锁申 请等待时,直接处理写等待队列中的加写锁申请。
优选地,处理模块还用于:
在根据判断结果和rwlock结构体中记录的读最高优先级以及写最高优 先级,处理读等待队列中的加读锁申请以及写等待队列中的加写锁申请之前, 判断被释放的是读锁还是写锁。
当被释放的是读锁时,将记录的当前持有读锁的读者的个数减一,并判 断减一之后持有读锁的读者的个数是否为零;当减一之后持有读锁的读者的 个数为零时,根据判断结果和rwlock结构体中记录的读最高优先级以及写最 高优先级,处理读等待队列中的加读锁申请以及写等待队列中的加写锁申请; 当减一之后持有读锁的读者的个数不为零时,继续等待当前持有读锁的读者 释放读锁。
当被释放的是写锁时,直接根据判断结果和rwlock结构体中记录的读最 高优先级以及写最高优先级,处理读等待队列中的加读锁申请以及写等待队 列中的加写锁申请。
与现有技术相比,本发明包括:接收加读锁申请或加写锁申请,并判断 读写锁之前是否处于被申请状态。当判定读写锁没有处于被申请状态时,直 接处理加读锁申请或加写锁申请,使读者获得读锁进入临界区操作或者使写 者获得写锁进入临界区操作。当读写锁处于被申请状态并且已经被占用时, 将接收到的加读锁申请加入预设的读等待队列中,并更新rwlock结构体中记 录的读等待队列中的读最高优先级;或者,将接收到的写读锁申请加入预设 的写等待队列中,并更新rwlock结构体中记录的写等待队列中的写最高优先 级。当被占用的读写锁被释放时,判断读等待队列中是否已有加读锁申请等 待以及写等待队列中是否已有加写锁申请等待;根据判断结果和rwlock结构 体中记录的读最高优先级以及写最高优先级,处理读等待队列中的加读锁申 请以及写等待队列中的加写锁申请。通过本发明的方案,能够减少或者避免 读者或者写者饿死的情况,提高了系统的资源利用率和系统并行处理性能。
下面对本发明实施例中的附图进行说明,实施例中的附图是用于对本发 明的进一步理解,与说明书一起用于解释本发明,并不构成对本发明保护范 围的限制。
图1为本发明的基于Linux的加读写锁的优化方法流程图;
图2为本发明的基于Linux的加读写锁的优化系统组成框图。
为了便于本领域技术人员的理解,下面结合附图对本发明作进一步的描 述,并不能用来限制本发明的保护范围。
本文以Linux内核2.6.32为例,充分考虑了读者和写者的情况,提出了 一个基于读者写者优先级的优化方法,尽量减少或者避免出现读者或者写者 饿死的情况,提高系统的资源利用率和系统并行处理性能。
本发明中的读写自旋锁的优化包括三个部分:加读锁的优化、加写锁的 优化和释放锁的优化,本文的优化方法对此三部分都进行了优化处理。本发 明的设计思路是:基于读者和写者的优先级,利用rwlock结构体中的填充位 pad1和pad2,分别用来记录读写等待队列中的最高优先级。然后在解锁的时 候,判断如果读写等待队列都有的话,比较这两个的优先级。当读者请求一 个读写锁的读锁时,若没有写者占有锁,或者堵塞的写者的优先级没有读者 高,则读者获得锁。
具体地,为了达到上述目的,本发明提出了一种基于Linux的加读写锁 的优化方法,如图1所示,该方法包括:
S101、接收加读锁申请或加写锁申请,并判断读写锁之前是否处于被申 请状态。
S102、当判定读写锁没有处于被申请状态时,直接处理加读锁申请或加 写锁申请,使读者获得读锁进入临界区操作或者使写者获得写锁进入临界区 操作。
S103、当读写锁处于被申请状态并且已经被占用时,将接收到的加读锁 申请加入预设的读等待队列中,并更新rwlock结构体中记录的读等待队列中 的读最高优先级;或者,将接收到的写读锁申请加入预设的写等待队列中, 并更新rwlock结构体中记录的写等待队列中的写最高优先级。
优选地,更新rwlock结构体中记录的读等待队列中的读最高优先级包 括:
比较接收到的加读锁申请的优先级是否高于rwlock结构体中预记录的 读等待队列中先前存在的加读锁申请的读最高优先级,当接收到的加读锁申 请的优先级高于读等待队列中先前存在的加读锁申请的读最高优先级时,更 新rwlock结构体中记录的读等待队列中的读最高优先级,或者,当读等待队 列中仅有接收到的加读锁申请时,将接收到的加读锁申请的优先级作为读最 高优先级并记录在rwlock结构体中。
优选地,更新rwlock结构体中记录的写等待队列中的写最高优先级包 括:
比较接收到的写读锁申请的优先级是否高于rwlock结构体中预记录的 写等待队列中先前存在的加写锁申请的写最高优先级,当接收到的加写锁申 请的优先级高于写等待队列中先前存在的加写锁申请的写最高优先级时,更 新rwlock结构体中记录的写等待队列中的写最高优先级,或者,当写等待队 列中仅有接收到的加写锁申请时,将接收到的加写锁申请的优先级作为写最 高优先级并记录在rwlock结构体中。
S104、当被占用的读写锁被释放时,判断读等待队列中是否已有加读锁 申请等待以及写等待队列中是否已有加写锁申请等待;根据判断结果和 rwlock结构体中记录的读最高优先级以及写最高优先级,处理读等待队列中 的加读锁申请以及写等待队列中的加写锁申请。
优选地,根据判断结果和rwlock结构体中记录的读最高优先级以及写最 高优先级,处理读等待队列中的加读锁申请以及写等待队列中的加写锁申请 包括:
当判定读等待队列中已有加读锁申请等待并且写等待队列中已有加写锁 申请等待时,比较rwlock结构体中记录的读最高优先级和写最高优先级;当 读最高优先级高于写最高优先级时,优先处理加读锁申请;当写最高优先级 高于读最高优先级时,优先处理加写锁申请。
在本发明实施例中,利用rwlock结构体中的填充位pad1和pad2,分别 用来记录读等待队列中的读最高优先级以及写等待队列中的写最高优先级。 这里比较rwlock结构体中记录的读最高优先级和写最高优先级,即比较pad1 和pad2的值的大小,若pad1的值大于pad2的值,则唤醒读等待队列中的读 者,否则唤醒写等待队列中的写者。
当判定读等待队列中已有加读锁申请等待,写等待队列中没有加写锁申 请等待时,直接处理读等待队列中的加读锁申请。
当判定写等待队列中已有加写锁申请等待,读等待队列中没有加读锁申 请等待时,直接处理写等待队列中的加写锁申请。
优选地,该方法还包括:
在根据判断结果和rwlock结构体中记录的读最高优先级以及写最高优 先级,处理读等待队列中的加读锁申请以及写等待队列中的加写锁申请之前, 判断被释放的是读锁还是写锁。
当被释放的是读锁时,将记录的当前持有读锁的读者的个数减一,并判 断减一之后持有读锁的读者的个数是否为零;当减一之后持有读锁的读者的 个数为零时,根据判断结果和rwlock结构体中记录的读最高优先级以及写最 高优先级,处理读等待队列中的加读锁申请以及写等待队列中的所述加写锁 申请;当减一之后持有读锁的读者的个数不为零时,继续等待当前持有读锁 的读者释放读锁。
当被释放的是写锁时,直接根据判断结果和rwlock结构体中记录的读最 高优先级以及写最高优先级,处理读等待队列中的加读锁申请以及写等待队 列中的加写锁申请。
为了达到上述目的,本发明还提出了一种基于Linux的加读写锁的优化 系统01,如图2所示,该系统包括:判断模块02、处理模块03和更新模块 04。
判断模块02,用于接收加读锁申请或加写锁申请,并判断读写锁之前是 否处于被申请状态。
处理模块03,用于当判定读写锁没有处于被申请状态时,直接处理加读 锁申请或加写锁申请,使读者获得读锁进入临界区操作或者使写者获得写锁 进入临界区操作。
更新模块04,用于当读写锁处于被申请状态并且已经被占用时,将接收 到的加读锁申请加入预设的读等待队列中,并更新rwlock结构体中记录的读 等待队列中的读最高优先级;或者,将接收到的写读锁申请加入预设的写等 待队列中,并更新rwlock结构体中记录的写等待队列中的写最高优先级。
处理模块03,还用于当被占用的读写锁被释放时,判断读等待队列中是 否已有加读锁申请等待以及写等待队列中是否已有加写锁申请等待;根据判 断结果和rwlock结构体中记录的读最高优先级以及写最高优先级,处理读等 待队列中的加读锁申请以及写等待队列中的加写锁申请。
优选地,
更新模块04更新rwlock结构体中记录的读等待队列中的读最高优先级 包括:
比较接收到的加读锁申请的优先级是否高于rwlock结构体中预记录的 读等待队列中先前存在的加读锁申请的读最高优先级,当接收到的加读锁申 请的优先级高于读等待队列中先前存在的加读锁申请的读最高优先级时,更 新rwlock结构体中记录的读等待队列中的读最高优先级,或者,当读等待队 列中仅有接收到的加读锁申请时,将接收到的加读锁申请的优先级作为读最 高优先级并记录在rwlock结构体中。
优选地,
更新模块04更新rwlock结构体中记录的写等待队列中的写最高优先级 包括:
比较接收到的写读锁申请的优先级是否高于rwlock结构体中预记录的 写等待队列中先前存在的加写锁申请的写最高优先级,当接收到的加写锁申 请的优先级高于写等待队列中先前存在的加写锁申请的写最高优先级时,更 新rwlock结构体中记录的写等待队列中的写最高优先级,或者,当写等待队 列中仅有接收到的加写锁申请时,将接收到的加写锁申请的优先级作为写最 高优先级并记录在rwlock结构体中。
优选地,处理模块03根据判断结果和rwlock结构体中记录的读最高优 先级以及写最高优先级,处理读等待队列中的加读锁申请以及写等待队列中 的加写锁申请包括:
当判定读等待队列中已有加读锁申请等待并且写等待队列中已有加写锁 申请等待时,比较rwlock结构体中记录的读最高优先级和写最高优先级;当 读最高优先级高于写最高优先级时,优先处理加读锁申请;当写最高优先级 高于读最高优先级时,优先处理加写锁申请。
当判定读等待队列中已有加读锁申请等待,写等待队列中没有加写锁申 请等待时,直接处理读等待队列中的加读锁申请。
当判定写等待队列中已有加写锁申请等待,读等待队列中没有加读锁申 请等待时,直接处理写等待队列中的加写锁申请。
优选地,处理模块03还用于:
在根据判断结果和rwlock结构体中记录的读最高优先级以及写最高优 先级,处理读等待队列中的加读锁申请以及写等待队列中的加写锁申请之前, 判断被释放的是读锁还是写锁。
当被释放的是读锁时,将记录的当前持有读锁的读者的个数减一,并判 断减一之后持有读锁的读者的个数是否为零;当减一之后持有读锁的读者的 个数为零时,根据判断结果和rwlock结构体中记录的读最高优先级以及写最 高优先级,处理读等待队列中的加读锁申请以及写等待队列中的加写锁申请; 当减一之后持有读锁的读者的个数不为零时,继续等待当前持有读锁的读者 释放读锁。
当被释放的是写锁时,直接根据判断结果和rwlock结构体中记录的读最 高优先级以及写最高优先级,处理读等待队列中的加读锁申请以及写等待队 列中的加写锁申请。
与现有技术相比,本发明包括:接收加读锁申请或加写锁申请,并判断 读写锁是否处于被申请状态。当判定读写锁没有处于被申请状态时,直接处 理加读锁申请或加写锁申请,使读者获得读锁进入临界区操作或者使写者获 得写锁进入临界区操作。当读写锁处于被申请状态并且已经被占用时,将接 收到的加读锁申请加入预设的读等待队列中,并更新rwlock结构体中记录的 读等待队列中的读最高优先级;或者,将接收到的写读锁申请加入预设的写 等待队列中,并更新rwlock结构体中记录的写等待队列中的写最高优先级。 当被占用的读写锁被释放时,判断读等待队列中是否已有加读锁申请等待以 及写等待队列中是否已有加写锁申请等待;根据判断结果和rwlock结构体中 记录的读最高优先级以及写最高优先级,处理读等待队列中的加读锁申请以 及写等待队列中的加写锁申请。通过本发明的方案,能够减少或者避免读者 或者写者饿死的情况,提高了系统的资源利用率和系统并行处理性能。
总之,本发明的有益效果是:通过基于读者、写者优先级的读写锁优化 方法,减少了或者避免了出现读者或者写者饿死的情况,提高了系统的资源 利用率和系统并行处理性能,同时不改变现有操作系统的数据结构,保持了 操作系统应用的兼容性。
需要说明的是,以上所述的实施例仅是为了便于本领域的技术人员理解 而已,并不用于限制本发明的保护范围,在不脱离本发明的发明构思的前提 下,本领域技术人员对本发明所做出的任何显而易见的替换和改进等均在本 发明的保护范围之内。
本文发布于:2023-04-13 03:18:15,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/85756.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |