首页 / 一种读写锁读写方法、装置、设备及存储介质

一种读写锁读写方法、装置、设备及存储介质公开 发明

技术领域

[0001] 本申请涉及计算机技术领域,特别涉及一种读写锁读写方法、装置、设备及存储介质。

相关背景技术

[0002] 在进行多线程软件开发时,通常需要使用锁对线程间的共享资源进行保护,以此来避免因多个线程同时修改共享资源而出现的数据混乱情况。目前,相对于同一时刻只能有一个线程访问共享资源的互斥锁,读写锁由于把对资源的访问进一步区分为读取和修改两种情况,允许多个线程同时获得读锁,使得多个线程能够同时读取共享资源,从而提升了多线程对共享资源的访问效率,以及多线程程序的运行性能,尤其是对多读少写的场景,性能的提升更是显著,因此在进行多线程软件开发时,读写锁往往被大量使用。
[0003] 然而,在使用C/C++语言进行多线程软件开发时,虽然各种主流的操作系统(OS,Operating System)上通常都提供了读写锁的原生C接口供使用,如windows上的SRW Lock(Slim Reader/Writer Lock,精简读取器/写入器锁)接口,linux、android、macOS、iOS、UNIX上的pthread_rwlock接口,并且这些接口的实现都比较简单高效,但却不支持读写锁的一些重要特性,如写锁优先、写锁嵌套、读锁升级、写锁降级等特性。除了操作系统原生读写锁外,其他一些读写锁的实现方案通常都会用到互斥锁和临界区技术,由于互斥锁和临界区技术的特性,即同一时刻只能有一个线程进入,其他线程被阻塞,因此会导致即使运行环境中只存在读线程,也会有线程因为互斥锁或临界区而被阻塞,虽然被阻塞的线程可以被快速唤醒,但也极大地降低了请求获取读锁的效率,从而降低了系统处理的吞吐量。
[0004] 综上,如何在继承操作系统原生读写锁读操作性能高、无阻塞的基础上,使读写锁支持写锁优先、写锁嵌套、读锁升级、写锁降级的特性是本领域目前还有待进一步解决的技术问题。

具体实施方式

[0066] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0067] 本申请实施例公开了一种读写锁读写方法,应用于操作系统,所述操作系统中包含第一原生读写锁和第二原生读写锁,且所述第一原生读写锁和所述第二原生读写锁的功能相同,参见图1所示,该方法包括:
[0068] 步骤S11:当获取到针对目标线程的写锁请求时,通过写锁数量计数器判断当前所述目标线程是否已获得过写锁。
[0069] 需要指出的是,本申请提出的读写锁读写方案应用于操作系统,并且该操作系统中包含两个功能相同的原生读写锁,分别为第一原生读写锁(RWLock1)和第二原生读写锁(RWLock2),且这两个原生读写锁均具有加写锁和加读锁的功能,其中第一原生读写锁可以作为等待读写锁,第二原生读写锁可以作为主读写锁,通过这两个原生读写锁可以使各线程进行相应的读写操作。具体的,当获取到针对当前线程,即目标线程的写锁请求时,可以先通过写锁数量计数器(WLockNum)判断当前所述目标线程是否已经获得过写锁,所述写锁数量计数器(WLockNum)用于记录线程已经获得的写锁数量。
[0070] 另外,需要指出的是,操作系统中还可以包括一个读锁数量计数器(RLockNum);所述读锁数量计数器(RLockNum)用于记录线程已经获得的读锁数量。进一步的,操作系统中还可以包括一个线程锁状态位(LockPhase),用于对线程的锁状态,如写锁状态和读锁状态进行记录。
[0071] 步骤S12:若所述目标线程获得过写锁,则对所述目标线程的写锁数量进行计数自加,以完成所述目标线程的写锁获取过程。
[0072] 本实施例中,如果所述写锁数量计数器的计数值不为0,则表明所述目标线程已经获得过写锁,此时可以对上述目标线程的写锁数量进行计数自加,从而完成该目标线程的写锁获取过程。
[0073] 步骤S13:若所述目标线程未获得过写锁,则向所述第一原生读写锁发送获取写锁请求,得到第一原生写锁。
[0074] 本实施例中,如果上述目标线程还未获得过写锁,则向操作系统中的第一原生读写锁发送获取写锁请求,从而得到一个原生写锁,即所述第一原生写锁。
[0075] 步骤S14:通过读锁数量计数器判断所述目标线程是否已获得过读锁,若所述目标线程已获得过读锁,则释放所述第二原生读写锁已获得过的读锁。
[0076] 本实施例中,向所述第一原生读写锁(RWLock1)发送获取写锁请求得到第一原生写锁之后,进一步的,可以通过读锁数量计数器(RLockNum)判断上述目标线程是否已经获得过读锁,如果上述目标线程已经获得过读锁,则对第二原生读写锁(RWLock2)已经获得过的读锁进行释放。具体可以通过读锁数量计数器(RLockNum)是否不等于0来判断目标线程是否已经获得过读锁。
[0077] 步骤S15:向所述第二原生读写锁发送获取写锁请求,得到所述第二原生写锁。
[0078] 本实施例中,释放第二原生读写锁(RWLock2)已获得过的读锁之后,向该第二原生读写锁(RWLock2)发送获取写锁请求,从而得到一个第二原生写锁。
[0079] 步骤S16:释放状态为写锁状态的所述第一原生写锁,并将所述目标线程设置为写锁状态,再对所述目标线程的写锁数量进行计数自加,以完成所述目标线程的写锁获取过程。
[0080] 本实施例中,向所述第二原生读写锁发送获取写锁请求得到第二原生写锁之后,对状态为写锁状态的上述第一原生写锁进行释放,然后将当前所述目标线程的状态设置为写锁状态,并通过线程锁状态位(LockPhase)对当前目标线程的锁状态进行记录,再对上述目标线程的写锁数量进行计数+1,即将写锁数量计数器(WLockNum)的计数值+1,从而完成该目标线程的整个写锁过程。
[0081] 可见,本申请实施例应用于操作系统,所述操作系统中包含第一原生读写锁和第二原生读写锁,且所述第一原生读写锁和所述第二原生读写锁的功能相同,包括:当获取到针对目标线程的写锁请求时,通过写锁数量计数器判断当前所述目标线程是否已获得过写锁;若所述目标线程获得过写锁,则对所述目标线程的写锁数量进行计数自加,以完成所述目标线程的写锁获取过程;若所述目标线程未获得过写锁,则向所述第一原生读写锁发送获取写锁请求,得到第一原生写锁;通过读锁数量计数器判断所述目标线程是否已获得过读锁,若所述目标线程已获得过读锁,则释放所述第二原生读写锁已获得过的读锁;向所述第二原生读写锁发送获取写锁请求,得到第二原生写锁;释放状态为写锁状态的所述第一原生写锁,并将所述目标线程设置为写锁状态,再对所述目标线程的写锁数量进行计数自加,以完成所述目标线程的写锁获取过程。本申请实施例通过两个功能相同的原生读写锁组合的方式进行读锁和写锁,继承了操作系统原生读写锁读操作性能高、无阻塞的优点,实现了写锁优先、写锁嵌套、读锁升级和写锁降级,弥补了原生读写锁的不足,能够解决读频繁环境下的写饥饿问题,降低使用读写锁进行多线程软件开发和编程的难度,减少死锁的出现,并提升获得读锁的效率和吞吐量。
[0082] 本申请实施例公开了一种具体的读写锁读写方法,应用于操作系统,所述操作系统中包含第一原生读写锁和第二原生读写锁,且所述第一原生读写锁和所述第二原生读写锁的功能相同,参见图2所示,通过两个功能相同的原生读写锁还可以实现释放写锁的功能:
[0083] 步骤S21:获取当前目标线程已获得过的写锁的数量,得到写锁数量。
[0084] 本实施例中,通过两个功能相同的原生读写锁还可以对已经获得的写锁进行释放。具体的,先获取当前目标线程已经获得过的写锁的数量,得到相应的写锁数量。
[0085] 步骤S22:若所述写锁数量等于0,则表明已完成目标线程的写锁释放过程。
[0086] 本实施例中,在获取到当前目标线程已获得过的写锁的数量之后,如果所述写锁数量等于0,则表明当前已完成了目标线程的写锁释放过程。
[0087] 步骤S23:若所述写锁数量大于1,则对所述目标线程的写锁数量进行计数自减的操作,以完成所述目标线程的写锁释放过程。
[0088] 本实施例中,如果所述写锁数量大于1,则对所述目标线程的写锁数量进行计数自减的操作,从而完成该目标线程的写锁释放过程。
[0089] 步骤S24:若所述写锁数量等于1,则通过读锁数量计数器判断当前所述目标线程是否已获得过读锁。
[0090] 本实施例中,如果上述写锁数量=1,则通过读锁数量计数器(RLockNum)是否不等于0来判断当前所述目标线程是否已经获得过读锁。
[0091] 步骤S25:若当前所述目标线程获得过读锁,则对所述目标线程的写锁数量进行计数自减的操作,以完成所述目标线程的写锁释放过程。
[0092] 本实施例中,如果当前所述目标线程已经获得过读锁,则对该目标线程的写锁数量进行计数‑1的操作,从而完成该目标线程的写锁释放过程
[0093] 步骤S26:若当前所述目标线程未获得过读锁,则释放所述目标线程中已获得过的状态为写锁状态的第二原生写锁,并对所述目标线程的写锁数量进行计数自减,以完成所述目标线程的写锁释放过程。
[0094] 本实施例中,如果当前所述目标线程没有获得过读锁,则对该目标线程中已获得过的状态为写锁状态的上述第二原生写锁进行释放,然后对该目标线程的写锁数量进行计数‑1,即将写锁数量计数器(WLockNum)的计数值‑1,从而完成该目标线程的写锁释放过程。
[0095] 可见,本申请实施例对释放写锁的过程进行了详细的介绍,基于操作系统中的两个原生读写锁的组合使用,方法简洁,继承了操作系统原生读写锁读操作性能高、无阻塞的优点,不仅能够对已经获得的写锁进行释放,同时还可以非常简单的实现读写锁的写优先特性,同时简化了写锁降级流程,弥补了操作系统原生读写锁的不足;与其他使用互斥锁或临界区技术实现的读写锁相比,本申请可以支持无阻塞获得读锁,在多读少写的场景下,效率和吞吐量均有较大的提升。
[0096] 本申请实施例公开了一种具体的读写锁读写方法,应用于操作系统,所述操作系统中包含第一原生读写锁和第二原生读写锁,且所述第一原生读写锁和所述第二原生读写锁的功能相同,参见图3所示,通过两个功能相同的原生读写锁还可以实现获取读锁的功能:
[0097] 步骤S31:当获取到针对目标线程的读锁请求时,通过读锁数量计数器判断当前所述目标线程是否已获得过读锁。
[0098] 本实施例中,当获取到针对当前线程,即目标线程的读锁请求时,可以通过读锁数量计数器(RLockNum)的计数值是否为0来判断当前所述目标线程是否已经获得过读锁。
[0099] 步骤S32:若所述目标线程获得过读锁,则对所述目标线程的读锁数量进行计数自加,以完成所述目标线程的读锁获取过程。
[0100] 本实施例中,如果当前所述读锁数量计数器的计数值不为0,则表明所述目标线程已经获得过读锁,此时可以对所述目标线程的读锁数量进行计数+1,从而完成所述目标线程的读锁获取过程。
[0101] 步骤S33:若所述目标线程未获得过读锁,则通过写锁数量计数器判断当前所述目标线程是否已获得过写锁。
[0102] 本实施例中,如果所述目标线程没有获得过读锁,则可以通过写锁数量计数器(WLockNum)判断当前所述目标线程是否已经获得过写锁,即判断写锁数量计数器(WLockNum)的计数值是否为0。
[0103] 步骤S34:若所述目标线程获得过写锁,则对所述目标线程的读锁数量进行计数自加,以完成所述目标线程的读锁获取过程。
[0104] 本实施例中,如果当前所述目标线程获得过写锁,则可以对目标线程的读锁数量进行计数+1,从而完成目标线程的读锁获取过程。
[0105] 步骤S35:若所述目标线程未获得过写锁,则向第一原生读写锁发送获取读锁请求,得到第一原生读锁,并向第二原生读写锁发送获取读锁请求,得到第二原生读锁。
[0106] 本实施例中,如果当前所述目标线程没有获得过写锁,则可以向上述第一原生读写锁发送获取读锁请求,得到一个原生读锁,即第一原生读锁,接着向上述第二原生读写锁发送获取读锁请求,从而得到一个原生读锁,即第二原生读锁。
[0107] 步骤S36:释放状态为读锁状态的所述第二原生读锁,并将所述目标线程设置为读锁状态,再对所述目标线程的读锁数量进行计数自加,以完成所述目标线程的读锁获取过程。
[0108] 本实施例中,向第二原生读写锁发送获取读锁请求,得到第二原生读锁之后,可以对状态为读锁状态的第二原生读锁进行释放,然后将目标线程设置为读锁状态,并通过线程锁状态位(LockPhase)记录当前目标线程的锁状态,再对目标线程的读锁数量进行计数+1,即将读锁数量计数器(RLockNum)的计数值加1,从而完成目标线程的读锁获取过程。
[0109] 可见,本申请实施例对请求读锁的过程进行了详细的介绍,在获取读锁时,先判断当前目标线程是否已获得过读锁,如果所述目标线程未获得过读锁,则通过写锁数量计数器判断当前所述目标线程是否已获得过写锁,如果所述目标线程获得过写锁,则对所述目标线程的读锁数量进行计数自加,以完成所述目标线程的读锁获取过程;若所述目标线程未获得过写锁,则向所述第一原生读写锁发送获取读锁请求,得到第一原生读锁,并向所述第二原生读写锁发送获取读锁请求,得到第二原生读锁,并释放状态为读锁状态的所述第二原生读锁,再将所述目标线程设置为读锁状态,最后对所述目标线程的读锁数量进行计数自加,以完成所述目标线程的读锁获取过程。上述方式可以非常简单的实现读写锁的写优先特性,同时简化了读锁的升级流程,弥补了操作系统原生读写锁的不足,并降低了请求获取读锁的效率,从而降低了系统处理的吞吐量。
[0110] 本申请实施例公开了一种具体的读写锁读写方法,应用于操作系统,所述操作系统中包含第一原生读写锁和第二原生读写锁,且所述第一原生读写锁和所述第二原生读写锁的功能相同,参见图4所示,通过两个功能相同的原生读写锁还可以实现释放读锁的功能:
[0111] 步骤S41:获取当前目标线程已获得过的读锁的数量,得到读锁数量。
[0112] 本实施例中,可以先通过读锁数量计数器(RLockNum)的计数值来获取当前目标线程已经获得过的读锁的数量,得到相应的读锁数量。
[0113] 步骤S42:若所述读锁数量等于0,则表明已完成所述目标线程的读锁释放过程。
[0114] 本实施例中,如果所述读锁数量=0,则表明当前已完成了所述目标线程的读锁释放过程。
[0115] 步骤S43:若所述读锁数量大于0,则对所述目标线程的读锁数量进行计数自减的操作,以完成所述目标线程的读锁释放过程。
[0116] 本实施例中,如果所述读锁数量大于0,则表明已经获得过读锁,此时可以对所述目标线程的读锁数量进行计数自减(即计数值‑1)的操作,从而完成该目标线程的读锁释放过程。
[0117] 步骤S44:若所述读锁数量等于1,则通过写锁数量计数器判断当前所述目标线程是否已获得过写锁。
[0118] 本实施例中,如果上述读锁数量=1,则可以通过写锁数量计数器(WLockNum)的计数值进一步判断当前目标线程是否已经获得过写锁。
[0119] 步骤S45:若当前所述目标线程获得过写锁,则对所述目标线程的读锁数量进行计数自减的操作,以完成所述目标线程的读锁释放过程。
[0120] 本实施例中,如果当前所述写锁数量计数器(WLockNum)的计数值不为0,则表明所述目标线程已获得过写锁,此时可以对该目标线程的读锁数量进行计数‑1的操作,从而完成该目标线程的读锁释放过程。
[0121] 步骤S46:若当前所述目标线程未获得过写锁,则通过当前所述目标线程锁状态位判断当前所述目标线程是否为读锁状态。
[0122] 本实施例中,如果当前所述写锁数量计数器(WLockNum)的计数值=0,则表明当前所述目标线程没有获得过写锁,此时可以通过当前所述目标线程的锁状态位来判断当前所述目标线程是否为读锁状态。
[0123] 步骤S47:若当前所述目标线程为读锁状态,则释放所述目标线程中已获得过的第二原生读锁。
[0124] 本实施例中,如果当前所述目标线程为读锁状态,则对目标线程中已获得过的上述第二原生读锁进行释放。
[0125] 步骤S48:若当前所述目标线程为写锁状态,则释放所述目标线程中已获得过的第二原生写锁。
[0126] 本实施例中,如果当前所述目标线程为写锁状态,则对目标线程中已获得过的上述第二原生写锁进行释放。
[0127] 步骤S49:对所述目标线程的读锁数量进行计数自减,以完成所述目标线程的读锁释放过程。
[0128] 本实施例中,在对目标线程的写锁和读锁进行释放之后,对所述目标程的读锁数量进行计数自减,即对读锁数量计数器(RLockNum)的计数值进行‑1操作,从而完成该目标线程的读锁释放过程。
[0129] 可见,本申请实施例对释放读锁的过程进行了详细的介绍,通过对两个操作系统原生读写锁的组合使用,实现了写锁优先、写锁嵌套、读锁升级以及写锁降级,方法简洁高效,弥补了目前一个操作系统原生读写锁的不足,并且,继承了操作系统原生读写锁读操作性能高、无阻塞的优点;与传统的一个操作系统原生读写锁相比,本申请支持写锁优先、写锁嵌套、读锁升级以及写锁降级;另外,与其他使用互斥锁或是临界区技术实现的读写锁相比,本申请可以支持无阻塞获得读锁,在多读少写的场景下,效率和吞吐量有极大的提升。
[0130] 相应的,本申请实施例还公开了一种读写锁读写装置,应用于操作系统,所述操作系统中包含第一原生读写锁和第二原生读写锁,且所述第一原生读写锁和所述第二原生读写锁的功能相同,参见图5所示,该装置包括:
[0131] 第一判断模块11,用于当获取到针对目标线程的写锁请求时,通过写锁数量计数器判断当前所述目标线程是否已获得过写锁;
[0132] 第一计数自加模块12,用于如果所述目标线程获得过写锁,则对所述目标线程的写锁数量进行计数自加,以完成所述目标线程的写锁获取过程;
[0133] 第一请求发送模块13,用于如果所述目标线程未获得过写锁,则向所述第一原生读写锁发送获取写锁请求,得到第一原生写锁;
[0134] 第二判断模块14,用于通过读锁数量计数器判断所述目标线程是否已获得过读锁;
[0135] 读锁释放模块15,用于如果所述目标线程已获得过读锁,则释放所述第二原生读写锁已获得过的读锁;
[0136] 第二请求发送模块16,用于向所述第二原生读写锁发送获取写锁请求,得到第二原生写锁;
[0137] 写锁获取模块17,用于释放状态为写锁状态的所述第一原生写锁,并将所述目标线程设置为写锁状态,再对所述目标线程的写锁数量进行计数自加,以完成所述目标线程的写锁获取过程。
[0138] 其中,关于上述各个模块的具体工作流程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
[0139] 可见,本申请实施例应用于操作系统,所述操作系统中包含第一原生读写锁和第二原生读写锁,且所述第一原生读写锁和所述第二原生读写锁的功能相同,包括:当获取到针对目标线程的写锁请求时,通过写锁数量计数器判断当前所述目标线程是否已获得过写锁;若所述目标线程获得过写锁,则对所述目标线程的写锁数量进行计数自加,以完成所述目标线程的写锁获取过程;若所述目标线程未获得过写锁,则向所述第一原生读写锁发送获取写锁请求,得到第一原生写锁;通过读锁数量计数器判断所述目标线程是否已获得过读锁,若所述目标线程已获得过读锁,则释放所述第二原生读写锁已获得过的读锁;向所述第二原生读写锁发送获取写锁请求,得到第二原生写锁;释放状态为写锁状态的所述第一原生写锁,并将所述目标线程设置为写锁状态,再对所述目标线程的写锁数量进行计数自加,以完成所述目标线程的写锁获取过程。本申请实施例通过两个功能相同的原生读写锁组合的方式进行读锁和写锁,继承了操作系统原生读写锁读操作性能高、无阻塞的优点,实现了写锁优先、写锁嵌套、读锁升级和写锁降级,弥补了原生读写锁的不足,能够解决读频繁环境下的写饥饿问题,降低使用读写锁进行多线程软件开发和编程的难度,减少死锁的出现,并提升获得读锁的效率和吞吐量。
[0140] 在一些具体实施例中,所述读写锁读写装置,还可以包括:
[0141] 写锁数量获取单元,用于获取当前所述目标线程已获得过的写锁的数量,得到写锁数量;
[0142] 第一写锁释放单元,用于如果所述写锁数量等于0,则表明已完成所述目标线程的写锁释放过程;
[0143] 第一计数自减单元,用于如果所述写锁数量大于1,则对所述目标线程的写锁数量进行计数自减的操作,以完成所述目标线程的写锁释放过程;
[0144] 目标判断单元,用于如果所述写锁数量等于1,则通过所述读锁数量计数器判断当前所述目标线程是否已获得过读锁;
[0145] 第二计数自减单元,用于如果当前所述目标线程获得过读锁,则对所述目标线程的写锁数量进行计数自减的操作,以完成所述目标线程的写锁释放过程;
[0146] 第二写锁释放单元,用于如果当前所述目标线程未获得过读锁,则释放所述目标线程中已获得过的状态为写锁状态的所述第二原生写锁,并对所述目标线程的写锁数量进行计数自减,以完成所述目标线程的写锁释放过程。
[0147] 在一些具体实施例中,所述读写锁读写装置,还可以包括:
[0148] 第一判断单元,用于当获取到针对所述目标线程的读锁请求时,通过所述读锁数量计数器判断当前所述目标线程是否已获得过读锁;
[0149] 第一计数自加单元,用于如果所述目标线程获得过读锁,则对所述目标线程的读锁数量进行计数自加,以完成所述目标线程的读锁获取过程;
[0150] 第二判断单元,用于如果所述目标线程未获得过读锁,则通过所述写锁数量计数器判断当前所述目标线程是否已获得过写锁;
[0151] 第二计数自加单元,用于如果所述目标线程获得过写锁,则对所述目标线程的读锁数量进行计数自加,以完成所述目标线程的读锁获取过程;
[0152] 请求发送单元,用于如果所述目标线程未获得过写锁,则向所述第一原生读写锁发送获取读锁请求,得到第一原生读锁,并向所述第二原生读写锁发送获取读锁请求,得到第二原生读锁;
[0153] 读锁获取单元,用于释放状态为读锁状态的所述第二原生读锁,并将所述目标线程设置为读锁状态,再对所述目标线程的读锁数量进行计数自加,以完成所述目标线程的读锁获取过程。
[0154] 在一些具体实施例中,所述读写锁读写装置,还可以包括:
[0155] 读锁数量获取单元,用于获取当前所述目标线程已获得过的读锁的数量,得到读锁数量;
[0156] 第一读锁释放单元,用于如果所述读锁数量等于0,则表明已完成所述目标线程的读锁释放过程;
[0157] 第三计数自减单元,用于如果所述读锁数量大于0,则对所述目标线程的读锁数量进行计数自减的操作,以完成所述目标线程的读锁释放过程;
[0158] 第三判断单元,用于如果所述读锁数量等于1,则通过所述写锁数量计数器判断当前所述目标线程是否已获得过写锁;
[0159] 第四计数自减单元,用于如果当前所述目标线程获得过写锁,则对所述目标线程的读锁数量进行计数自减的操作,以完成所述目标线程的读锁释放过程;
[0160] 第四判断单元,用于如果当前所述目标线程未获得过写锁,则通过当前所述目标线程锁状态位判断当前所述目标线程是否为读锁状态;
[0161] 第二读锁释放单元,用于如果当前所述目标线程为读锁状态,则释放所述目标线程中已获得过的所述第二原生读锁;
[0162] 第三写锁释放单元,用于如果当前所述目标线程为写锁状态,则释放所述目标线程中已获得过的所述第二原生写锁;
[0163] 第五计数自减单元,用于对所述目标线程的读锁数量进行计数自减,以完成所述目标线程的读锁释放过程。
[0164] 在一些具体实施例中,所述读写锁读写装置,还可以包括:
[0165] 锁状态记录单元,用于通过预设的线程锁状态位对所述目标线程的锁状态进行记录。
[0166] 进一步的,本申请实施例还公开了一种电子设备,图6是根据一示例性实施例示出的电子设备20结构图,图中的内容不能认为是对本申请的使用范围的任何限制。
[0167] 图6为本申请实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的读写锁读写方法中的相关步骤。另外,本实施例中的电子设备20具体可以为电子计算机。
[0168] 本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
[0169] 另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222等,存储方式可以是短暂存储或者永久存储。
[0170] 其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,其可以是Windows Server、Netware、Unix、Linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的读写锁读写方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。
[0171] 进一步的,本申请还公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述公开的读写锁读写方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
[0172] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0173] 专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0174] 结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD‑ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0175] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0176] 以上对本申请所提供的一种读写锁读写方法、装置、设备及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

当前第1页 第1页 第2页 第3页