CN108572876B - 一种读写锁的实现方法及装置 - Google Patents

一种读写锁的实现方法及装置 Download PDF

Info

Publication number
CN108572876B
CN108572876B CN201810186320.9A CN201810186320A CN108572876B CN 108572876 B CN108572876 B CN 108572876B CN 201810186320 A CN201810186320 A CN 201810186320A CN 108572876 B CN108572876 B CN 108572876B
Authority
CN
China
Prior art keywords
state
read
request message
write
lock
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810186320.9A
Other languages
English (en)
Other versions
CN108572876A (zh
Inventor
谢正明
赵刚
董映
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhou Lvmeng Chengdu Technology Co ltd
Nsfocus Technologies Inc
Nsfocus Technologies Group Co Ltd
Original Assignee
Nsfocus Technologies Inc
Beijing NSFocus Information Security Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nsfocus Technologies Inc, Beijing NSFocus Information Security Technology Co Ltd filed Critical Nsfocus Technologies Inc
Priority to CN201810186320.9A priority Critical patent/CN108572876B/zh
Publication of CN108572876A publication Critical patent/CN108572876A/zh
Application granted granted Critical
Publication of CN108572876B publication Critical patent/CN108572876B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Abstract

本发明公开了一种读写锁的实现方法及装置。该方法包括:接收用户发送的第一请求消息,若第一请求消息用于请求对数据进行读操作,则可获取预设读写锁的状态,并确定预设读写锁的状态为第一状态后,根据第一请求消息对数据进行读操作。其中,第一状态表示当前不存在线程对数据进行写操作,由此,本发明实施例可直接根据预设读写锁的状态确定当前不存在线程对数据进行写操作之后,在读操作十分频繁,写操作相对较少的***中,能够极大地降低线程加读锁的开销,从而能够避免每个读操作都需要对***总线进行加锁或解锁易导致多个读操作之间产生拥堵的情况,降低多个读操作之间加锁、解锁的碰撞几率,进而提高***的执行效率。

Description

一种读写锁的实现方法及装置
技术领域
本发明涉及通信技术领域,尤其涉及一种读写锁的实现方法及装置。
背景技术
读写锁是一种自旋锁,它把共享资源的访问用户划分成读用户和写用户,读用户只对共享资源进行读操作,写用户则对共享资源进行写操作。一个读写锁同时只能有一个写用户或多个读用户,但不能同时既有读用户又有写用户。在多处理器***中,允许同时有多个读用户来访问共享资源,在读操作加锁时,写操作被阻塞。当处于写加锁时,所有试图读写资源的操作将被阻塞。
目前,进行读操作或写操作是通过线程实现的,在引入线程的操作***中,可以将线程作为独立运行和独立调度的基本单位。多个线程可以并发执行,为了避免同一数据在被修改时,其他线程也对该数据进行修改;或者,因为数据正在被修改而导致数据不能读,通常在线程对数据进行读操作或写操作的过程中,对***总线进行加锁,在执行完读写操作后,再对***总线进行解锁,然而这种方法在高并发的多处理器***中,尤其是读操作十分频繁,写操作相对较少的***中,每个读操作都需要对***总线进行加锁或解锁,容易导致多个读操作之间产生拥堵的情况,进而降低多处理器***的执行效率。
基于此,目前亟需一种读写锁的实现方法,用于解决现有技术中每个读操作都需要对***总线进行加锁或解锁易导致多个读操作之间产生拥堵的问题。
发明内容
本发明实施例提供一种读写锁的实现方法及装置,以解决现有技术中每个读操作都需要对***总线进行加锁或解锁易导致多个读操作之间产生拥堵的技术问题。
本发明实施例提供一种读写锁的实现方法,包括:
接收用户发送的第一请求消息;
若所述第一请求消息用于请求对数据进行读操作,则获取预设读写锁的状态,并在确定所述预设读写锁的状态为第一状态后,根据所述第一请求消息对所述数据进行读操作;所述第一状态表示不存在对所述数据进行写操作的线程。
可选地,若所述第一请求消息用于请求对所述数据进行写操作,则所述方法还包括:
将所述预设读写锁的状态设置为第二状态;所述第二状态表示当前存在对所述数据进行写操作的线程;
设置***总线处于加写锁状态,并根据所述第一请求消息对所述数据进行写操作。
可选地,在对所述数据完成写操作之后,所述方法还包括:
将所述预设读写锁的状态设置为第一状态。
可选地,将所述预设读写锁的状态设置为第一状态,包括:
若确定不存在第二请求消息,则将所述预设读写锁的状态设置为第一状态;或者,若确定存在所述第二请求消息,且所述第二请求消息用于请求对数据进行读操作,则唤醒所述第二请求消息,并将所述预设读写锁的状态设置为第一状态;
其中,所述第二请求消息为在执行所述第一请求消息的过程中接收到的请求消息。
可选地,所述方法还包括:
若确定所述预设读写锁的状态为第二状态,且确定***总线未处于加写锁状态,则设置所述***总线处于加读锁状态,并根据所述第一请求消息对所述数据进行读操作;所述第二状态表示存在对数据进行写操作的线程。
本发明实施例提供一种读写锁的实现装置,包括:
接收单元,用于接收用户发送的第一请求消息;
处理单元,用于若所述第一请求消息用于请求对数据进行读操作,则获取预设读写锁的状态,并在确定所述预设读写锁的状态为第一状态后,根据所述第一请求消息对所述数据进行读操作;所述第一状态表示不存在对所述数据进行写操作的线程。
可选地,所述处理单元还用于:
若所述第一请求消息用于请求对所述数据进行写操作,则将所述预设读写锁的状态设置为第二状态;所述第二状态表示当前存在对所述数据进行写操作的线程;以及设置***总线处于加写锁状态,并根据所述第一请求消息对所述数据进行写操作。
可选地,所述处理单元在对所述数据完成写操作之后,还用于:
将所述预设读写锁的状态设置为第一状态。
可选地,所述处理单元具体用于:
若确定不存在第二请求消息,则将所述预设读写锁的状态设置为第一状态;或者,若确定存在所述第二请求消息,且所述第二请求消息用于请求对数据进行读操作,则唤醒所述第二请求消息,并将所述预设读写锁的状态设置为第一状态;
其中,所述第二请求消息为在执行所述第一请求消息的过程中接收到的请求消息。
可选地,所述处理单元还用于:
若确定所述预设读写锁的状态为第二状态,且确定***总线未处于加写锁状态,则设置所述***总线处于加读锁状态,并根据所述第一请求消息对所述数据进行读操作;所述第二状态表示存在对数据进行写操作的线程。
本发明实施例中,接收用户发送的第一请求消息,若第一请求消息用于请求对数据进行读操作,则可获取预设读写锁的状态,并确定预设读写锁的状态为第一状态后,根据第一请求消息对数据进行读操作。其中,第一状态表示当前不存在线程对数据进行写操作,由此,本发明实施例可直接根据读写锁的状态确定当前不存在线程对数据进行写操作之后,可直接根据第一请求消息对数据进行读操作,相比于现有读写锁实现方式中需要对***总线进行加读锁后才能进行读操作而言,本发明实施例中读操作无需对***总线进行加读锁,从而能够缩短读操作的处理时间;进一步地,在高并发的多处理器***中,尤其是读操作十分频繁,写操作相对较少的***中,采用本发明实施例提供的方法,能够极大地降低线程加读锁的开销,从而能够避免每个读操作都需要对***总线进行加锁或解锁易导致多个读操作之间产生拥堵的情况,降低多个读操作之间加锁、解锁的碰撞几率,进而提高***的执行效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术提供的读写锁的实现方法的流程示意图;
图2为本发明实施例提供的一种读写锁的实现方法对应的流程示意图;
图3为本发明实施例提供的另一种读写锁的实现方法对应的流程示意图;
图4为本发明实施例中所涉及到的整体性流程的示意图;
图5为本发明实施例提供的一种读写锁的实现装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在引入线程的操作***中,多个线程并发执行时,往往需要访问同一数据。为了保证该数据的完整性,目前使用锁机制。例如,线程对一个数据进行读操作之前,先对该数据加读锁,读操作执行完毕后,再解读锁。同样地,线程对一个数据进行写操作之前,先对该数据加写锁,读操作执行完毕后,再解写锁。进一步地,线程对数据实现加锁或解锁,也就是对***总线进行加锁或解锁。
为了便于理解,图1示例性示出了现有技术提供的读写锁的实现方法的流程示意图,如图1所示,以一个线程为例,该线程对数据进行写操作之前,首先对***总线进行加写锁,以使得其他线程都不能使用总线,此时获取并解析***总线的状态,以判断是否存在线程对数据进行读操作或者写操作。在允许对数据进行读操作时,也需要先对***总线进行加读锁(计算新的读标识)。可见,现有技术的实施过程中,由于每个读操作都需要对***总线进行加读锁,在高并发的多处理器***中,尤其是读操作十分频繁,写操作相对较少的***中,比如路由表、地址解析协议(Address Resolution Protocol,ARP)表,容易导致多个读操作之间产生拥堵的情况,进而降低多处理器***的执行效率。
鉴于此,本发明实施例提供一种读写锁的实现方法,可直接根据读写锁的状态确定当前不存在线程对数据进行写操作之后,可直接根据第一请求消息对数据进行读操作,相比于现有读写锁实现方式中需要对***总线进行加读锁后才能进行读操作而言,本发明实施例中读操作无需对***总线进行加读锁,从而能够缩短读操作的处理时间;进一步地,在高并发的多处理器***中,尤其是读操作十分频繁,写操作相对较少的***中,采用本发明实施例提供的方法,能够极大地降低线程加读锁的开销,从而能够避免每个读操作都需要对***总线进行加锁或解锁易导致多个读操作之间产生拥堵的情况,降低多个读操作之间加锁、解锁的碰撞几率,进而提高***的执行效率。
下面结合说明书附图介绍本发明实施例提供的技术方案。
实施例一:
图2示例性示出了本发明实施例提供的一种读写锁的实现方法对应的流程示意图,如图2所示,具体包括如下步骤:
步骤201,接收用户发送的第一请求消息。
步骤202,若所述第一请求消息用于请求对数据进行读操作,则获取预设读写锁的状态,并在确定所述预设读写锁的状态为第一状态后,根据所述第一请求消息对所述数据进行读操作。
具体来说,步骤202中,预设读写锁可以设置于***总线之前,以便根据预设读写锁的状态执行相应的操作。本发明实施例中,预设读写锁的状态包括第一状态和第二状态,其中,第一状态表示不存在对所述数据进行写操作的线程,第二状态表示存在对所述数据进行写操作的线程。
本发明实施例中,预设读写锁的状态可以通过多种形式表现,例如,可以为字符串形式;或者,也可以文字形式;或者,还可以为数值形式。以数值形式为例,可以通过设置FLAG,并为该FLAG赋值的方式来表现预设读写锁的状态。举个例子,可以令FLAG=0时,预设读写锁的状态为第一状态,即当前不存在线程对所述数据进行写操作;令FLAG=1时,预设读写锁的状态为第二状态,即当前存在线程对所述数据进行写操作。
本发明实施例中,根据获取到的预设读写锁状态的不同,所执行的步骤也不同,下文将针对不同的预设读写锁状态进行具体说明。
(1)预设读写锁的状态为第一状态
若预设读写锁的状态为第一状态,则表明不存在对所述数据进行写操作的线程,具体地,包括两种情况:
情况一,当前不存在对所述数据进行写操作的线程,也不存在对数据进行读操作的线程;
情况二,当前不存在对所述数据进行写操作的线程,但存在对数据进行读操作的线程。
上述情况二中,虽然存在对数据进行读操作的线程,但是,读写锁作为一种自旋锁,可允许多个存在多个读用户,因此,上述两种情况均可根据所述第一请求消息对所述数据进行读操作。
(2)预设读写锁的状态为第二状态
若预设读写锁的状态为第二状态,则表明当前存在对所述数据进行写操作的线程。根据读写锁的性质,一个读写锁同时只能有一个写用户或多个读用户,但不能同时既有读用户又有写用户,因此,若预设读写锁的状态为第二状态,则可进一步判断***总线的状态。
本发明实施例中,***总线的状态包括加写锁状态和非加写锁状态。下面针对上述两种不同的***总线状态进行具体说明。
状态一:加写锁状态
若***总线的状态为加写锁状态,则表明当前仍然存在线程对所述数据进行写操作,该第一请求消息需要等待写操作完成。
状态二:非加写锁状态
若***总线的状态为非加写锁状态,则表明当前不存在对所述数据进行写操作的线程。也就是说,从确定预设读写锁的状态为第二状态到确定***总线的状态为非加写锁状态之间的时间段内,写操作已完成。
进一步地,可设置***总线处于加读锁状态,并根据所述第一请求消息对所述数据进行读操作。
本发明实施例中读操作无需对***总线进行加读锁,在高并发的多处理器***中,尤其是读操作十分频繁,写操作相对较少的***中,采用上述步骤201和步骤202所描述的方法,能够极大地降低线程加读锁的开销,提升多线程之间的并发能力,从而能够避免每个读操作都需要对***总线进行加锁或解锁易导致多个读操作之间产生拥堵的情况,降低多个读操作之间加锁、解锁的碰撞几率,进而提高***的执行效率。
实施例二:
图3示例性示出了本发明实施例提供的另一种读写锁的实现方法对应的流程示意图,如图3所示,具体包括如下步骤:
步骤301,接收用户发送的第一请求消息。
步骤302,若所述第一请求消息用于请求对数据进行写操作,则将所述预设读写锁的状态设置为第二状态。
步骤303,设置***总线处于加写锁状态,并根据所述第一请求消息对所述数据进行写操作。
步骤301和步骤302中,在确定接收到的第一请求消息是用于请求对数据进行写操作之后,可将预设读写锁的状态设置为第二状态,如此,能够避免用户发送的落后于第一请求消息的其它消息与第一请求消息之间产生冲突;进一步地,只有当第一请求消息用于请求对数据进行写操作时,才会重新设置预设读写锁的状态,由于本发明实施例适用的场景中,写操作的次数远远小于读操作的次数,因此,采用这种方法,能够大大降低重新设置预设读写锁状态的频率,进而能够提高***运行效率。
步骤303中,在设置***总线处于加写锁状态前,可以是在等待了预设时间段之后,再执行后续操作。其中,预设时间段可以根据读操作的执行时间确定,可以根据多个读操作的平均执行时间确定;或者,也可以根据读操作的频率和读操作的执行时间确定。本领域技术人员可以根据经验和实际情况确定预设时间段,具体不做限定。如此,能够避免因在设置预设读写锁的状态之前存在线程对数据进行读操作而造成第一请求消息所请求的写操作与读操作产生冲突的情况。
进一步地,在对所述数据完成写操作之后,还可以将预设读写锁的状态设置为第一状态,如此,能够便于后续请求读操作的请求消息执行对应的流程。
具体来说,在对所述数据完成写操作之后,在将预设读写锁的状态设置为第一状态之前,可以判断是否存在第二请求消息,其中,第二请求消息为在执行所述第一请求消息的过程中接收到的请求消息。根据判断结果,可以分为以下三种情况:(1)不存在第二请求消息;(2)存在第二请求消息,且第二请求消息用于请求对数据进行读操作;(3)存在第二请求消息,且第二请求消息用于请求对数据进行写操作。
上述所描述的情况中,若为第一种情况,则可直接预设将写锁的状态设置为第一状态;若为第二种情况,则可唤醒所述第二请求消息,并将预设读写锁的状态设置为第一状态;若为第三种情况,则可在预设时间段之后,重新设置***总线处于加写锁状态,并根据第二请求消息对所述数据进行写操作。
本发明实施例中,只有当请求消息请求的操作为写操作时才会重新设置读写所的状态,并对***总线加写锁,相比于现有技术中无论读操作还想写操作均需要对***总线加锁的情况而言,采用上述步骤301至步骤303所描述的方法,能够极大地降低线程加读锁的开销,特别是能够提高大型服务器中高并发高吞吐量的***效率。
为了更加清楚地介绍上述实施例一和实施例二所描述的流程,下面结合图4,对本发明实施例中所涉及到的流程进行整体性说明。如图4所示,可以包括以下步骤:
步骤401,接收用户发送的第一请求消息。
步骤402,判断第一请求消息所请求的操作为读操作还是写操作,若为读操作,则执行步骤403;若为写操作,则执行步骤414。
步骤403,获取预设读写锁的状态。
步骤404,判断预设读写锁的状态是第一状态还是第二状态,若为第一状态,则执行步骤405;若为第二状态,则执行步骤406。
步骤405,根据所述第一请求消息对所述数据进行读操作。
步骤406,判断***总线的状态是否为加写锁状态,若为加写锁状态,则执行步骤407;若为非加写锁状态,则执行步骤408。
步骤407,等待直至该第一请求消息被唤醒。
步骤408,对***总线加读锁以使所述***总线处于加读锁状态,并根据所述第一请求消息对所述数据进行读操作。
步骤409,对***总线解读锁。
步骤410,判断是否还存在线程对数据进行读操作,若存在,则返回步骤410;若不存在,则执行步骤411。
步骤411,判断是否存在请求消息请求对数据进行写操作,若存在,则执行步骤412;若不存在,则结束流程。
步骤413,唤醒所述请求对数据进行写操作的请求消息。
步骤414,将预设读写锁的状态设置为第二状态。
步骤415,预设时间段之后,设置***总线处于加写锁状态,并根据第一请求消息对数据进行写操作。
步骤416,对***总线解写锁。
步骤417,判断是否存在第二请求消息,其中,第二请求消息为在执行所述第一请求消息的过程中接收到的请求消息,若存在,则执行步骤418;若不存在,则执行步骤420。
步骤418,判断第二请求消息是用于请求对数据进行读操作还是用于请求对数据进行写操作,若为读操作,则执行步骤419;若为写操作,则返回步骤415。
步骤419,唤醒所述第二请求消息。
步骤420,将预设读写锁的状态设置为第一状态。
上述步骤403至步骤413中,当预设读写锁的状态为第一状态时,是不需要设置***总线处于加读锁状态的,从而可以减少设置加读锁的时间;当预设读写锁的状态为第二状态时,即存在对数据进行写操作的线程,才会设置总线状态处于加写锁状态,能够极大地降低线程加读锁的开销。
上述步骤414至步骤420中,当第一请求消息请求写操作时,需要先将预设读写锁的状态设置为第二状态,为了保证在此之前的读操作顺利完成,在设置***总线处于加写锁状态之前,需要等待预设时间段之后再进行写操作。在写操作完成之后,需要将预设读写锁的状态设置为第一状态,从而能够便于后续的请求读操作执行相应的步骤。
也就是说,本发明实施例中,在不进行写操作的情况下,无需设置***总线处于加读锁状态;在进行写操作的情况下,才需要将设读写锁的状态设置为第二状态。
需要说明的是,上述步骤编号仅为一种执行流程的示例性表示,本申请对各个步骤的先后顺序不做具体限定,例如,上述步骤419和步骤420中,也可以先将预设读写锁的状态设置为第一状态,然后唤醒所述第二请求消息。
实施例三:
针对上述方法流程,本申请还提供一种读写锁的实现装置,该装置的具体实现可参照上述方法流程,图5示例性示出了本发明实施例提供的一种读写锁的实现装置的结构示意图,如图5所示,该装置包括接收单元501、处理单元502;其中,
接收单元501,用于接收用户发送的第一请求消息;
处理单元502,用于若所述第一请求消息用于请求对数据进行读操作,则获取预设读写锁的状态,并在确定所述预设读写锁的状态为第一状态后,根据所述第一请求消息对所述数据进行读操作;所述第一状态表示不存在对所述数据进行写操作的线程。
可选地,所述处理单元502还用于:
若所述第一请求消息用于请求对所述数据进行写操作,则将所述预设读写锁的状态设置为第二状态;所述第二状态表示当前存在对所述数据进行写操作的线程;以及设置***总线处于加写锁状态,并根据所述第一请求消息对所述数据进行写操作。
可选地,所述处理单元502在对所述数据完成写操作之后,还用于:
将所述预设读写锁的状态设置为第一状态。
可选地,所述处理单元502具体用于:
若确定不存在第二请求消息,则将所述预设读写锁的状态设置为第一状态;或者,若确定存在所述第二请求消息,且所述第二请求消息用于请求对数据进行读操作,则唤醒所述第二请求消息,并将所述预设读写锁的状态设置为第一状态;
其中,所述第二请求消息为在执行所述第一请求消息的过程中接收到的请求消息。
可选地,所述处理单元502还用于:
若确定所述预设读写锁的状态为第二状态,且确定***总线未处于加写锁状态,则设置***总线处于加读锁状态,并根据所述第一请求消息对所述数据进行读操作;所述第二状态表示存在对数据进行写操作的线程。
本发明实施例中,接收用户发送的第一请求消息,若第一请求消息用于请求对数据进行读操作,则可获取预设读写锁的状态,并确定预设读写锁的状态为第一状态后,根据第一请求消息对数据进行读操作。其中,第一状态表示当前不存在线程对数据进行写操作,由此,本发明实施例可直接根据读写锁的状态确定当前不存在线程对数据进行写操作之后,可直接根据第一请求消息对数据进行读操作,相比于现有读写锁实现方式中需要对***总线进行加读锁后才能进行读操作而言,本发明实施例中读操作无需对***总线进行加读锁,从而能够缩短读操作的处理时间;进一步地,在高并发的多处理器***中,尤其是读操作十分频繁,写操作相对较少的***中,采用本发明实施例提供的方法,能够极大地降低线程加读锁的开销,从而能够避免每个读操作都需要对***总线进行加锁或解锁易导致多个读操作之间产生拥堵的情况,降低多个读操作之间加锁、解锁的碰撞几率,进而提高***的执行效率;更进一步地,采用本发明实施例所提供的方法,相比于现有技术,读操作的性能可以提升50倍左右,若应用于路由表、ARP表,相对于现有技术中的三层转发的性能,本发明实施例中的读操作的性能能够提升2至3倍。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种读写锁的实现方法,其特征在于,包括:
接收用户发送的第一请求消息;
若所述第一请求消息用于请求对数据进行读操作,则获取预设读写锁的状态,并在确定所述预设读写锁的状态为第一状态后,根据所述第一请求消息对所述数据进行读操作;所述第一状态表示不存在对所述数据进行写操作的线程;在不进行写操作的情况下,无需设置***总线处于加读锁状态;在进行写操作的情况下,才需要将读写锁的状态设置为第二状态。
2.根据权利要求1所述的方法,其特征在于,若所述第一请求消息用于请求对所述数据进行写操作,则所述方法还包括:
将所述预设读写锁的状态设置为第二状态;所述第二状态表示当前存在对所述数据进行写操作的线程;
设置***总线处于加写锁状态,并根据所述第一请求消息对所述数据进行写操作。
3.根据权利要求2所述的方法,其特征在于,在对所述数据完成写操作之后,所述方法还包括:
将所述预设读写锁的状态设置为第一状态。
4.根据权利要求3所述的方法,其特征在于,将所述预设读写锁的状态设置为第一状态,包括:
若确定不存在第二请求消息,则将所述预设读写锁的状态设置为第一状态;或者,若确定存在所述第二请求消息,且所述第二请求消息用于请求对数据进行读操作,则唤醒所述第二请求消息,并将所述预设读写锁的状态设置为第一状态;
其中,所述第二请求消息为在执行所述第一请求消息的过程中接收到的请求消息。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若确定所述预设读写锁的状态为第二状态,且确定***总线未处于加写锁状态,则设置所述***总线处于加读锁状态,并根据所述第一请求消息对所述数据进行读操作;所述第二状态表示存在对数据进行写操作的线程。
6.一种读写锁的实现装置,其特征在于,包括:
接收单元,用于接收用户发送的第一请求消息;
处理单元,用于若所述第一请求消息用于请求对数据进行读操作,则获取预设读写锁的状态,并在确定所述预设读写锁的状态为第一状态后,根据所述第一请求消息对所述数据进行读操作;所述第一状态表示不存在对所述数据进行写操作的线程;在不进行写操作的情况下,无需设置***总线处于加读锁状态;在进行写操作的情况下,才需要将读写锁的状态设置为第二状态。
7.根据权利要求6所述的装置,其特征在于,所述处理单元还用于:
若所述第一请求消息用于请求对所述数据进行写操作,则将所述预设读写锁的状态设置为第二状态;所述第二状态表示当前存在对所述数据进行写操作的线程;以及设置***总线处于加写锁状态,并根据所述第一请求消息对所述数据进行写操作。
8.根据权利要求7所述的装置,其特征在于,所述处理单元在对所述数据完成写操作之后,还用于:
将所述预设读写锁的状态设置为第一状态。
9.根据权利要求8所述的装置,其特征在于,所述处理单元具体用于:
若确定不存在第二请求消息,则将所述预设读写锁的状态设置为第一状态;或者,若确定存在所述第二请求消息,且所述第二请求消息用于请求对数据进行读操作,则唤醒所述第二请求消息,并将所述预设读写锁的状态设置为第一状态;
其中,所述第二请求消息为在执行所述第一请求消息的过程中接收到的请求消息。
10.根据权利要求6所述的装置,其特征在于,所述处理单元还用于:
若确定所述预设读写锁的状态为第二状态,且确定***总线未处于加写锁状态,则设置所述***总线处于加读锁状态,并根据所述第一请求消息对所述数据进行读操作;所述第二状态表示存在对数据进行写操作的线程。
CN201810186320.9A 2018-03-07 2018-03-07 一种读写锁的实现方法及装置 Active CN108572876B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810186320.9A CN108572876B (zh) 2018-03-07 2018-03-07 一种读写锁的实现方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810186320.9A CN108572876B (zh) 2018-03-07 2018-03-07 一种读写锁的实现方法及装置

Publications (2)

Publication Number Publication Date
CN108572876A CN108572876A (zh) 2018-09-25
CN108572876B true CN108572876B (zh) 2020-11-20

Family

ID=63576762

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810186320.9A Active CN108572876B (zh) 2018-03-07 2018-03-07 一种读写锁的实现方法及装置

Country Status (1)

Country Link
CN (1) CN108572876B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111104412B (zh) * 2018-10-25 2023-05-30 阿里巴巴集团控股有限公司 基于单线程的并发控制方法、装置和***
CN109698971B (zh) * 2019-01-15 2021-07-06 海信视像科技股份有限公司 一种数据处理方法及装置
CN111857545B (zh) * 2019-04-28 2023-12-29 深信服科技股份有限公司 一种读写锁冲突判断方法、***、设备及计算机介质
CN110908968B (zh) * 2019-11-14 2022-05-27 浪潮电子信息产业股份有限公司 一种文件锁解锁时避免惊群的方法、装置、设备及存储介质
CN113419870A (zh) * 2021-06-20 2021-09-21 济南浪潮数据技术有限公司 一种卷读写方法和装置
CN115202884B (zh) * 2022-07-26 2023-08-22 江苏安超云软件有限公司 基于轮询的高性能***的加解读写锁的方法及应用
CN116028437B (zh) * 2023-03-29 2023-07-14 苏州浪潮智能科技有限公司 文件读取方法、装置、raid卡、存储***及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106790694A (zh) * 2017-02-21 2017-05-31 广州爱九游信息技术有限公司 分布式***及分布式***中目标对象的调度方法
CN107632794A (zh) * 2017-10-20 2018-01-26 北京小米移动软件有限公司 读写锁控制方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2762418B1 (fr) * 1997-04-17 1999-06-11 Alsthom Cge Alcatel Procede de gestion d'une memoire partagee
US8973004B2 (en) * 2009-06-26 2015-03-03 Oracle America, Inc. Transactional locking with read-write locks in transactional memory systems
CN102999378B (zh) * 2012-12-03 2015-08-26 中国科学院软件研究所 一种读写锁实现方法
CN104102549B (zh) * 2013-04-01 2017-12-15 华为技术有限公司 一种实现多线程互斥操作的方法、装置和芯片
CN104461705B (zh) * 2014-11-17 2019-02-19 华为技术有限公司 一种业务访问的方法及存储控制器、集群存储***

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106790694A (zh) * 2017-02-21 2017-05-31 广州爱九游信息技术有限公司 分布式***及分布式***中目标对象的调度方法
CN107632794A (zh) * 2017-10-20 2018-01-26 北京小米移动软件有限公司 读写锁控制方法及装置

Also Published As

Publication number Publication date
CN108572876A (zh) 2018-09-25

Similar Documents

Publication Publication Date Title
CN108572876B (zh) 一种读写锁的实现方法及装置
US20040225742A1 (en) Using local locks for global synchronization in multi-node systems
US20130138886A1 (en) Scheduler, multi-core processor system, and scheduling method
EP2945072A1 (en) Method and apparatus for processing redo data of database
US8190857B2 (en) Deleting a shared resource node after reserving its identifier in delete pending queue until deletion condition is met to allow continued access for currently accessing processor
CN110704112B (zh) 在区块链中并发执行交易的方法和装置
US8666958B2 (en) Approaches to reducing lock communications in a shared disk database
CN112099962B (zh) 分布式锁实现方法、装置和电子设备
CN104063355A (zh) 对服务器集群进行配置的方法及配置中心服务器
US11500693B2 (en) Distributed system for distributed lock management and method for operating the same
CN112148480A (zh) 基于多线程的任务处理方法、装置、设备及存储介质
WO2015085914A1 (zh) 数据库访问方法和装置
CN110908968B (zh) 一种文件锁解锁时避免惊群的方法、装置、设备及存储介质
US10310916B2 (en) Scalable spinlocks for non-uniform memory access
CN112068948B (zh) 数据散列方法、可读存储介质和电子设备
CN113961364A (zh) 一种大规模锁***实现方法、装置、存储介质和服务器
CN111261206B (zh) 一种读写方法、装置和电子设备及可读存储介质
US20090292885A1 (en) Method and apparatus for providing atomic access to memory
CN112541041A (zh) 一种数据处理方法、装置、服务器及存储介质
CN115951844B (zh) 分布式文件***的文件锁管理方法、设备及介质
CN114840356B (zh) 一种数据处理方法、数据处理***及相关装置
CN113806388A (zh) 基于分布式锁的业务处理方法及装置
CN109976675B (zh) 一种数据更新、读取方法、装置、设备及存储介质
CN111814007B (zh) 双向链表数据处理方法、装置、设备及机器可读存储介质
CN117687744A (zh) 一种硬件事务内存中对事务进行动态调度的方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder

Address after: 100089 Beijing city Haidian District Road No. 4 North wa Yitai three storey building

Patentee after: NSFOCUS Technologies Group Co.,Ltd.

Patentee after: NSFOCUS TECHNOLOGIES Inc.

Address before: 100089 Beijing city Haidian District Road No. 4 North wa Yitai three storey building

Patentee before: NSFOCUS INFORMATION TECHNOLOGY Co.,Ltd.

Patentee before: NSFOCUS TECHNOLOGIES Inc.

CP01 Change in the name or title of a patent holder
TR01 Transfer of patent right

Effective date of registration: 20220330

Address after: 100089 Beijing city Haidian District Road No. 4 North wa Yitai 5 storey building

Patentee after: NSFOCUS Technologies Group Co.,Ltd.

Patentee after: NSFOCUS TECHNOLOGIES Inc.

Patentee after: Shenzhou Lvmeng Chengdu Technology Co.,Ltd.

Address before: 100089 Beijing city Haidian District Road No. 4 North wa Yitai three storey building

Patentee before: NSFOCUS Technologies Group Co.,Ltd.

Patentee before: NSFOCUS TECHNOLOGIES Inc.

TR01 Transfer of patent right