本发明涉及计算机,尤其涉及一种基于状态切换的读写实现方法、系统、存储介质及设备。
背景技术:
1、目前在很多场景中都需要在状态切换时进行读写操作,例如操作系统启动需要经历开机状态、已开启状态和关机状态,文件系统需要经历未挂载状态、挂载中状态、已挂载状态和卸载中状态。所以状态切换是假设有一系列连续的状态,状态切换需要依次递进,不允许倒退和跳变。每种状态皆有支持和不支持的操作。每个操作需要在对应的状态下执行,否则操作执行失败。
2、图1为根据现有技术提供的文件系统挂载和卸载状态切换的结构示意图。如图1所示,以文件系统挂载、卸载状态切换举例,写者负责切换文件系统状态,读者获取文件系统状态,判断当前状态是否允许操作文件,具体如下:
3、1)当文件系统处于unmounted(未挂载)状态时,写者仅允许将状态切换到mounting(挂载中)状态,读者不允许操作文件;
4、2)当文件系统处于mounting状态时,写者仅允许将状态切换到mounted(已挂载)状态,读者允许操作文件;
5、3)当文件系统处于mounted状态时,写者仅允许将状态切换到unmounting(卸载中)状态,读者允许操作文件;
6、4)当文件系统处于unmounting状态时,写者仅允许将状态切换到unmounted状态,读者不允许操作文件。
7、图2为根据现有技术提供的文件系统利用读写锁进行挂载和卸载状态切换的结构示意图。如图2所示,通过常规的读写锁实现状态切换的方法如下:
8、1)写者切换状态前,先尝试加写锁,如果存在读者,则先自旋等待,直至没有任何读者时才加上写锁,然后切换状态,最后解写锁。
9、2)读者操作文件前,先尝试加读锁,如果当前状态不允许操作,则先自旋等待,直至允许操作时才加上读锁,然后操作文件,最后解读锁。
10、图3为根据现有技术提供的使用读写锁进行状态切换导致死锁的示意图。如图3所示,通过常规的读写锁实现状态切换,存在大量的加锁/解锁操作,若无法直接加锁成功还需要自旋等待,对文件系统性能有所损耗,甚至引起超时断流问题,而且当读写锁与其它锁同时使用时,还会引起潜在的死锁问题。
技术实现思路
1、有鉴于此,本发明的目的在于提出一种基于状态切换的读写实现方法、系统、存储介质及设备,用以在实现与读写锁相同功能表现的同时,提升程序稳定性。
2、基于上述目的,本发明提供了一种基于状态切换的读写实现方法,包括以下步骤:
3、响应于系统处于初始状态并接收到第一写请求,判断初始状态的引用计数器的计数值是否为第一数值;
4、响应于初始状态的引用计数器的计数值为第一数值,基于第一写请求进行写操作,以使系统切换至中间状态;
5、响应于系统处于中间状态,根据接收到的读请求进行读操作,或者根据接收到的第二写请求进行写操作以使系统切换至下一中间状态或最终状态;
6、响应于系统处于最终状态并接收到第三写请求,判断最终状态的引用计数器的计数值是否为第一数值;
7、响应于最终状态的引用计数器的计数值为第一数值,基于第三写请求进行写操作,以使系统切换至初始状态。
8、在一些实施例中,响应于系统处于中间状态,根据接收到的读请求进行读操作包括:
9、响应于系统处于中间状态并接收到读请求,判断当前中间状态是否允许读请求进行读操作;
10、响应于当前中间状态允许读请求进行读操作,将当前中间状态的引用计数器的计数值增加第二数值,并进行读操作;
11、响应于完成读操作,将当前中间状态的引用计数器的计数值减小第二数值,并判断其当前计数值是否为第一数值;
12、响应于当前中间状态的引用计数器的当前计数值为第一数值,确定允许当前中间状态的写请求进行写操作。
13、在一些实施例中,方法还包括:
14、响应于当前中间状态不允许读请求进行读操作,使读请求处于等待操作状态,直到切换至下一中间状态时允许读请求进行读操作。
15、在一些实施例中,方法还包括:
16、响应于当前中间状态不允许读请求进行读操作,直接确定读操作失败。
17、在一些实施例中,响应于系统处于中间状态,根据接收到的第二写请求进行写操作以使系统切换至下一中间状态或最终状态包括:
18、响应于系统处于中间状态并接收到第二写请求,判断当前中间状态的下一状态是否为预期状态;
19、响应于下一状态为预期状态,判断当前中间状态的引用计数器的计数值是否为第一数值;
20、响应于当前中间状态的引用计数器的计数值为第一数值,基于第二写请求进行写操作,以使系统切换至下一中间状态或最终状态。
21、在一些实施例中,方法还包括:
22、响应于当前中间状态的引用计数器的计数值不为第一数值,等待当前中间状态的所有读操作完成。
23、在一些实施例中,方法还包括:
24、响应于当前中间状态的引用计数器的计数值不为第一数值,直接确定本次状态切换失败。
25、本发明的另一方面,还提供了一种基于状态切换的读写实现系统,包括:
26、第一判断模块,配置用于响应于系统处于初始状态并接收到第一写请求,判断初始状态的引用计数器的计数值是否为第一数值;
27、第一切换模块,配置用于响应于初始状态的引用计数器的计数值为第一数值,基于第一写请求进行写操作,以使系统切换至中间状态;
28、第二切换模块,配置用于响应于系统处于中间状态,根据接收到的读请求进行读操作,或者根据接收到的第二写请求进行写操作以使系统切换至下一中间状态或最终状态;
29、第二判断模块,配置用于响应于系统处于最终状态并接收到第三写请求,判断最终状态的引用计数器的计数值是否为第一数值;以及
30、第三切换模块,配置用于响应于最终状态的引用计数器的计数值为第一数值,基于第三写请求进行写操作,以使系统切换至初始状态。
31、本发明的又一方面,还提供了一种计算机可读存储介质,存储有计算机程序指令,该计算机程序指令被处理器执行时实现上述方法。
32、本发明的再一方面,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该计算机程序被处理器执行时执行上述方法。
33、本发明至少具有以下有益技术效果:
34、本发明的基于状态切换的读写实现方法,适用于状态切换需要依次递进且不允许倒退和跳变的场景,能够达到与读写锁相同的功能表现,并且无性能损耗、稳定性高、简单易用,通过引用计数实现读写锁功能,不会对读者/写者流程真正加锁,能够避免与其它锁交叉使用时导致程序死锁问题,有助于提升程序性能。
1.一种基于状态切换的读写实现方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的方法,其特征在于,响应于所述系统处于中间状态,根据接收到的读请求进行读操作包括:
3.根据权利要求2所述的方法,其特征在于,还包括:
4.根据权利要求2所述的方法,其特征在于,还包括:
5.根据权利要求1所述的方法,其特征在于,响应于所述系统处于中间状态,根据接收到的第二写请求进行写操作以使所述系统切换至下一中间状态或最终状态包括:
6.根据权利要求5所述的方法,其特征在于,还包括:
7.根据权利要求5所述的方法,其特征在于,还包括:
8.一种基于状态切换的读写实现系统,其特征在于,包括:
9.一种计算机可读存储介质,其特征在于,存储有计算机程序指令,所述计算机程序指令被处理器执行时实现如权利要求1-7任意一项所述的方法。
10.一种计算机设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时执行如权利要求1-7任意一项所述的方法。