CN109976675B - 一种数据更新、读取方法、装置、设备及存储介质 - Google Patents
一种数据更新、读取方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109976675B CN109976675B CN201910256706.7A CN201910256706A CN109976675B CN 109976675 B CN109976675 B CN 109976675B CN 201910256706 A CN201910256706 A CN 201910256706A CN 109976675 B CN109976675 B CN 109976675B
- Authority
- CN
- China
- Prior art keywords
- thread
- data block
- read
- data
- reading
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 80
- 238000004590 computer program Methods 0.000 claims description 6
- 230000003139 buffering effect Effects 0.000 abstract description 8
- 238000010586 diagram Methods 0.000 description 15
- 230000007717 exclusion Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据更新、读取方法、装置、设备及存储介质。该方法包括:写线程确定读指针当前指向的第一数据块和未指向的第二数据块;写线程更新所述第二数据块中的数据,并修改读指针的当前指向为指向第二数据块;如果用于读取第一数据块的读线程的线程锁状态为非锁定,则写线程更新第一数据块中的数据。本发明实施例由于如果用于读取第一数据块的读线程的线程锁状态为非锁定,则说明已没有读线程对第一数据块进行读操作,在此情况下,写线程才对第一数据块进行更新操作,从而避免双缓冲中所存在的读写冲突,进而提高了程序运行性能。
Description
技术领域
本发明实施例涉及数据处理技术,尤其涉及一种数据更新、读取方法、装置、设备及存储介质。
背景技术
在计算机设备中的程序运行过程中,经常遇到并发读写数据的情况,其中,读数据指的是读线程所进行的读操作,写数据指的写线程所进行的写操作(即更新操作),并发读写数据指的是对同一个数据块同时进行读操作和写操作。在并发读写数据时,为了保证正常读写数据,现有技术中通常采用双缓冲的方式进行处理,具体的:双缓冲中存在两个数据块,读线程加载一个公共的读指针,读指针是指向当前正在读取的数据块的指针变量,每个读线程在对数据块进行读操作时,将根据读指针的指向,读取读指针所指向的数据块中的数据。写线程在对数据块进行更新操作时,获取读指针,根据读指针的指向,更新读指针未指向的数据块中的数据,即对当前未读取的数据块进行更新操作,在完成对当前未读取的数据块中的数据的更新后,将读指针由指向当前正在读取的数据块变更为指向更新后的当前未读取的数据块,便对当前正在读取的数据块进行更新操作,至此完成对双缓冲中两个数据块的更新操作。
在上述过程中,写线程在完成对当前未读取的数据块的更新操作后,由于其难以准确判断全部读线程何时完成对当前正在读取的数据块所进行的读操作,为了避免出现读写冲突,通常采用延时更新的方式,具体的:设置延迟时长阈值,在将读指针由指向当前正在读取的数据块变更为指向更新后的当前未读取的数据块后,并不是立即对当前正在读取的数据块进行更新操作,而是在达到延迟时长阈值后,对当前正在读取的数据块进行更新操作。
然而,现有技术中至少存在如下问题:采用延时更新的方式仍然可能出现读写冲突,其原因在于:在延迟时长阈值内没有读线程对当前正在读取的数据块进行读操作,而在写线程对当前正在读取的数据块进行更新操作时,由于读线程获取到的读指针指向的仍是当前正在读取的数据块,因此,该读线程对数据块进行的读操作中所述的数据块正是当前正在读取的数据块,从而导致读写冲突。因此,延迟更新的方式无法从根本上避免读写冲突。
发明内容
本发明实施例提供一种数据更新、读取方法、装置、设备及存储介质,以避免读写冲突,提高程序运行性能。
第一方面,本发明实施例提供了一种数据更新方法,该方法包括:
写线程确定读指针当前指向的第一数据块和未指向的第二数据块;
所述写线程更新所述第二数据块中的数据,并修改所述读指针的当前指向为指向所述第二数据块;
如果用于读取第一数据块的读线程的线程锁状态为非锁定,则所述写线程更新所述第一数据块中的数据。
第二方面,本发明实施例还提供了一种数据读取方法,该方法包括:
读线程将线程锁状态设置为锁定;
所述读线程读取读指针所指向的数据块中的数据;
数据读取完毕,所述读线程将线程锁状态修改为非锁定。
第三方面,本发明实施例还提供了一种数据更新装置,该装置包括:
读指针指向确定模块,用于写线程确定读指针当前指向的第一数据块和未指向的第二数据块;
第二数据块更新模块,用于所述写线程更新所述第二数据块中的数据,并修改所述读指针的当前指向为指向所述第二数据块;
第一数据块更新模块,用于如果用于读取第一数据块的读线程的线程锁状态为非锁定,则所述写线程更新所述第一数据块中的数据。
第四方面,本发明实施例还提供了一种数据读取装置,该装置包括:
锁定状态设置模块,用于读线程将线程锁状态设置为锁定;
数据读取模块,用于所述读线程读取读指针所指向的数据块中的数据;
非锁定状态设置模块,用于数据读取完毕,所述读线程将线程锁状态修改为非锁定。
第五方面,本发明实施例还提供了一种设备,该设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例第一方面或者第二方面所述的方法。
第六方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例第一方面或者第二方面所述的方法。
本发明实施例通过写线程确定读指针当前指向的第一数据块和未指向的第二数据块,写线程更新第二数据块中的数据,并修改读指针的当前指向为指向第二数据块,写线程如果确定出用于读取第一数据块的读线程的线程锁状态为非锁定,则写线程更新第一数据块中的数据,上述由于如果用于读取第一数据块的读线程的线程锁状态为非锁定,则说明已没有读线程对第一数据块进行读操作,在此情况下,写线程才对第一数据块进行更新操作,从而避免双缓冲中所存在的读写冲突,进而提高了程序运行性能。
附图说明
图1是本发明实施例中的一种直播平台的显示界面的示意图;
图2是本发明实施例中的另一种直播平台的显示界面的示意图;
图3是本发明实施例中的一种礼物选择界面的示意图;
图4是本发明实施例中的另一种礼物选择界面的示意图;
图5是本发明实施例中的再一种礼物选择界面的示意图;
图6是本发明实施例中的又一种礼物选择界面的示意图;
图7是本发明实施例中的一种数据更新方法的流程图;
图8是本发明实施例中的一种数据更新方法的应用示意图;
图9是本发明实施例中的一种数据读取方法的流程图;
图10是本发明实施例中的另一种数据读取方法的流程图;
图11是本发明实施例中的一种数据读取方法的应用示意图;
图12是本发明实施例中的一种数据更新装置的结构示意图;
图13是本发明实施例中的一种数据读取装置的结构示意图;
图14是本发明实施例中的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定,此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例
在计算机设备中的程序运行过程中,经常遇到并发读写数据的应用场景,示例性的,如更新礼物配置等。其中,更新礼物配置可以出现于直播平台中,用于向用户提供礼物,以使用户可以根据实际情况向主播发送礼物。如图1所示,给出了一种直播平台的显示界面的示意图。其中,主播正在进行关于户外内容的直播,对于观看此主播所进行的直播内容的用户而言,如果对直播内容满意,可以通过向主播发送礼物的方式进行表达,与主播进行互动。具体可以如图2所示,通过触发显示界面上的礼物控件进入如图3所示的礼物选择界面,礼物选择界面向用户提供了当前周期用户可以选择的礼物。如图4所示,用户选择了礼物“打榜”,如图5所示,通过触发礼物选择界面上的发送控件,将选择的礼物“打榜”发送给主播。基于上述,可将上述过程理解为读线程所进行的读操作。
可以理解到,为了提升用户的使用体验,需要周期性地更新向用户提供的可选择的礼物。如图6所示,给出了一种礼物选择界面的示意图,该礼物选择界面示出了下一周期向用户提供的可选择的礼物。根据前述可知,图3也示出了一种礼物选择界面的示意图,与图6所不同的是,图3中的礼物选择界面示出了当前周期向用户提供的可选择的礼物。基于上述,可将由图3转变为图6的过程理解为写线程所进行的更新操作。
需要说明的是,上述更新操作和读操作针对的是同一个数据块。可以理解到,如果写线程在对该数据块进行更新操作时,还存在读线程对该数据块进行的读操作,则上述将出现前文所述的读写冲突。本发明实施例所要解决的问题是如何避免同一数据块中的读写冲突,更为具体的所要解决的问题是如何避免双缓冲中同一数据块中的读写冲突。其中,双缓冲就是指对于通常要被多个线程访问的数据块,再额外定义一个备份数据块,即形成两个数据块。下面将结合具体实施例对上述更新操作以及读操作进行进一步说明。
图7为本发明实施例提供的一种数据更新方法的流程图,本实施例可适用于并发读写场景下对数据更新的情况,该方法可以由数据更新装置来执行,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如典型的是服务器和计算机等。如图7所示,该方法具体包括如下步骤:
步骤110、写线程确定读指针当前指向的第一数据块和未指向的第二数据块。
在本发明的实施例中,读指针为指向当前正在读取的数据块中的数据的指针变量,其中,指针变量表示的是用来存放其它变量地址的变量,指针变量只有被正确赋值后才能通过它访问指向的变量。读线程可以通过调用读指针读取读指针当前指向的数据块中的数据。由于双缓冲中存在两个数据块,为了便于区分,这里将读指针当前指向的数据块称为第一数据块,将读指针当前未指向的数据块称为第二数据块。需要说明的是,上述所述的第一数据块和第二数据块仅用于区分两个数据块,并不用于限定双缓冲中一个数据块为第一数据块,另一个数据块为第二数据块。可以理解到,对于双缓冲中的两个数据块来说,某个数据块可能为第一数据块,也可能为第二数据块,相应的,另一个数据块可能为第一数据块,也可能为第二数据块,具体数据块是第一数据块,还是第二数据块,是由读指针的当前指向确定的,读指针当前指向的数据块为第一数据块,读指针当前未指向的数据块为第二数据块。还需要说明的是,本发明实施例中,读指针的数量为一个。
写线程在对数据块进行更新操作前,先确定读指针的当前指向,根据读指针的当前指向,确定双缓冲中两个数据块,哪个数据块为第一数据块,哪个数据块为第二数据块,具体的,将读指针当前指向的数据块确定为第一数据块,将读指向当前未指向的数据块确定为第二数据块。上述所述的写线程对数据块进行更新操作可以理解为写线程更新数据块中的数据。示例性的,如双缓冲中的两个数据块分别为数据块A和数据块B,如果读指针当前指向的数据块为数据块A,则将数据块A确定为第一数据块,相应的,将读指针当前未指向的数据块B确定为第二数据块。如果读指针当前指向的数据块为数据块B,则将数据块B确定为第一数据块,相应的,将读指针当前未指向的数据块A确定为第二数据块。
步骤120、写线程更新第二数据块中的数据,并修改读指针的当前指向为指向第二数据块。
在本发明的实施例中,由于读线程是通过调用读指针读取读指针当前指向的数据块中的数据的,因此,对于写线程来说,为了避免出现读写冲突,写线程先对读指针当前未指向的数据块进行更新,根据前文所述可知,读指针当前未指向的数据块即为第二数据块,基于上述,写线程在确定读指针的当前指向后,先更新读指针当前未指向的数据块,即写线程先更新第二数据块。在完成对第二数据块的更新操作后,由于还需要对读指针当前指向的数据块(即第一数据块)进行更新操作,而读线程是通过调用读指针读取读指针当前指向的数据块中的数据块,因此,为了避免在对第一数据块进行更新的过程中出现读写冲突,可在完成对第二数据的更新操作后,修改读指针的当前指向,即将读指针的当前指向由指向第一数据块变更为指向第二数据块,以使后续读线程在根据读指针读取完第一数据块中的数据后,该读线程再根据读指针读取读指针当前指向的数据块中的数据时,由于读指针当前指向已经由指向第一数据块变更为指向第二数据块了,因此,读线程再根据读指针读取指针当前指向的数据块中的数据便为读取第二数据块中的数据。需要说明的是,由于第二数据块中的数据已得到了更新,因此,这里将读指针的当前指向由指向第一数据块变更为指向第二数据块中的第二数据块指的是更新后的第二数据块。
可以理解到,写线程在完成对第二数据块的更新操作后,将读指向的当前指向由指向第一数据块变更为指向第二数据块,由于第二数据块中的数据为更新后的数据,因此,后续如果读线程获取到的读指针的当前指向为指向更新后的第二数据块,则该读线程通过调用读线程读取到的数据为更新后的数据。
示例性的,如双缓冲中的两个数据块分别为数据块A和数据块B,其中,读指针当前指向的数据块为数据块A,读指向当前未指向的数据块为数据块B,即数据块A为第一数据块,数据块B为第二数据块,写线程根据读指针的当前指向,先对读指针当前未指向的数据块中的数据进行更新操作,即写线程先更新第二数据块(即数据块B)中的数据,在完成对第二数据块(即数据块B)的更新操作后,修改读指向的当前指向为由指向第一数据块(即数据块A)变更为指向第二数据块(即数据块B),这里指向第二数据块(即数据块B)为更新后的第二数据块(即更新后的数据块B)。
步骤130、写线程确定用于读取第一数据块的读线程的线程锁状态为非锁定;若是,则执行步骤140;若否,则执行步骤150。
步骤140、写线程更新第一数据块中的数据。
步骤150、写线程不更新第一数据块中的数据,并返回执行步骤130。
在本发明的实施例中,可以理解到,写线程在完成对第二数据块的更新操作后,虽然已将读指针的当前指向由指向第一数据块变更为指向第二数据块,但是在对第一数据块进行更新的过程中,仍可能出现读线程调用读指针读取的是第一数据块中的数据的情况,导致出现上述情况的原因在于:
由于读线程还未完成对第一数据块中的数据的所进行的读操作,因此,其调用读指针,读指针指向的仍是读指针未变更当前指向前的第一数据块。如果出现上述情况,则将导致出现读写冲突问题,即写线程在对第一数据块中的数据进行更新操作的同时,存在读线程通过调用读指针读取读指针所指向的第一数据块进行的读操作。可以理解到,为了避免出现读写冲突,关键点在于:如何确保写线程在对第一数据块进行更新操作的过程,已没有读线程通过读指针对第一数据块进行读操作,即如何确保在对第一数据块进行更新时,只存在写线程对其进行的更新操作,而不存在读线程对其进行的读操作。基于上述,可考虑采用如下方式解决,具体的:
写线程在对第一数据块进行更新操作前,其先确定用于读取第一数据块中的读线程的线程锁状态是否为非锁定,只有确定用于读取第一数据块中的读线程的线程锁状态为非锁定,才对第一数据块进行更新操作。换个角度理解,写线程如果确定出用于读取第一数据块中的读线程的线程锁状态为非锁定,则可以说明写线程在对第一数据块进行更新时,已没有读线程对第一数据块进行读操作。需要说明的是,上述用于读取第一数据块中的读线程的线程锁状态是在读线程对第一数据块进行读操作时形成的,写线程仅是用于确定用于读取第一数据块中的读线程的线程锁状态是否为非锁定,而并不会具体参与到写线程对第一数据块的更新操作过程中。简而言之,对于写线程对第一数据块的更新操作来说,相当于是无锁操作。上述用于读取第一数据块中的读线程的线程锁状态是在读线程对第一数据块进行读操作时形成的,可作如下理解:读线程调用读指针读取读指针当前指向的第一数据块中的数据前,读线程进行加锁操作,在数据读取完毕后,读线程进行解锁操作,读线程通过进行加锁操作将线程锁状态设置为锁定,读线程通过进行解锁操作将线程锁状态设置为非锁定。在数据读取过程中,线程锁状态将始终保持锁定不变。需要说明的是,读线程在进行加锁操作前,通常还需确定是否已生成线程锁,如果已生成线程锁,则直接进行加锁操作,如果未生成线程锁,则在生成线程锁后,进行加锁操作。
根据上述所述的用于读取第一数据块中的读线程的线程锁状态的形成过程,便可以对写线程如果确定出用于读取第一数据块中的读线程的线程锁状态为非锁定,则说明写线程在对第一数据块进行更新操作时,已没有读线程对第一数据块进行读操作所成立的原因有所理解,具体的:由于读线程调用读指针读取读指针当前指向的第一数据块中的数据前,读指针将线程锁状态设置为锁定,在数据读取过程中,线程锁状态将始终保持锁定不变,在数据读取完毕后,读线程再将线程锁状态设置为非锁定,上述由于读线程只有确定在数据读取完毕后,读线程才会将线程锁状态设置为非锁定,在数据读取过程中,线程锁状态始终为锁定,因此,写线程如果确定出用于读取第一数据块中的读线程的线程锁状态为非锁定,则说明数据已读取完毕,写线程可以对第一数据块进行更新操作。相应的,可以理解到,写线程如果确定出用于读取第一数据块中的读线程的线程锁状态为锁定,则说明数据未读取完毕,写线程还不能对第一数据块进行更新操作,否则将导致出现读写冲突。可以理解到,写线程如果确定出用于读取第一数据块中读线程的线程锁状态为非锁定,则由于读指针的当前指向已由指向第一数据块变更为指向第二数据块,因此,写线程在更新第一数据块中的数据的过程中,如果存在读线程对数据块进行读操作,则读线程读取到的将是读指针当前指向的第二数据块中的数据,并不会对写线程对第一数据块进行的更新操作产生影响。
为了便于更好的理解上文所述的线程锁状态,下面对线程锁相关概念进行说明。具体的:线程锁可用于以固定顺序执行的多个线程的调度。线程锁的思想是先锁定执行线程,在线程完成任务后再解除对线程的锁定。线程锁的类型可以包括互斥锁和自旋锁等。其中,互斥锁是一个二元变量,其状态为锁定和非锁定。其工作原理为:某线程访问数据前,必须先申请该互斥锁,即生成互斥锁,如果互斥锁状态为非锁定,则申请到该互斥锁,并立即占有该互斥锁,以防止其它线程访问该数据。如果互斥锁状态为锁定,则阻塞该线程。需要说明的是,只有锁定该互斥锁的线程才能释放该互斥锁,其它线程释放无效。自旋锁可以使线程在没有获得自旋锁的时候,去执行一个空循环,在若干个空循环后,如果该线程可以获得自旋锁,则该线程继续访问数据。如果该线程不能获得自旋锁,则该线程继续执行空循环。需要说明的是,针对本发明实施例所提供的技术方案来说,由于读线程的线程锁状态是在读线程对数据块进行读操作时形成的,因此,上述所述的某线程访问数据指的是读线程对数据块进行的读操作。还需要说明的是,可根据实际情况选择具体类型的线程锁,在此不作具体限定。这里所述的实际情况可以指线程锁竞争是否激烈以及线程占用线程锁时间是否短,对于线程锁竞争比较激烈以及线程占用线程锁时间较长的情况,可选用互斥锁。对于线程锁竞争不是很激烈以及线程占用线程锁时间较短的情况,可选用自旋锁。另需要说明的是,如果选用互斥锁,则需要使用TLS(Thread Local Storage,线程本地存储)指令来执行加锁操作和解锁操作。
基于上述,写线程确定用于读取第一数据块的读线程的线程锁状态是否为非锁定,并根据确定结果,确定是否更新第一数据块中的数据。具体的:写线程如果确定出用于读取第一数据块的读线程的线程锁状态为非锁定,则可以说明已没有读线程通过读指针读取第一数据块中的数据,此时,便可以对第一数据块进行更新操作,即更新第一数据块中的数据。相反的,写线程如果确定出用于读取第一数据块的读线程的线程锁状态为锁定,则可以说明还有读线程通过读指针读取第一数据块中的数据,此时,不能对第一数据块进行更新操作,否则,将导致出现读写冲突。
需要说明的是,读线程的数量可以为一个,也可以为两个或两个以上。上述所述的读线程的线程锁状态为非锁定指的是全部读线程的线程锁状态均为非锁定,上述所述的读线程的线程锁状态为锁定指的是至少存在一个读线程的线程锁状态为锁定。
在实现本发明实施例的过程中,基于如下考虑:如果用于读取第一数据块的读线程的线程锁状态为非锁定,则说明已没有读线程对第一数据块进行读操作,在此情况下,写线程如果对第一数据块进行更新操作,则将不会出现读写冲突。基于上述考虑,在写线程对读指针当前指向的第一数据块进行更新操作过程中,引入写线程确定用于读取第一数据块的读线程的线程锁状态是否为非锁定的操作,使得写线程只有在确定出用于读取第一数据块的读线程的线程锁状态为非锁定后,才对第一数据块进行更新操作。上述从根本上避免了双缓冲中所存在的读写冲突,进而提高了程序运行性能。
需要说明的是,传统技术中还可采用多线程原子操作计数方案解决双缓冲中存在的读写冲突问题,但是在工程上,多线程原子计数方案会导致系统开销增大。
本实施例的技术方案,通过写线程确定读指针当前指向的第一数据块和未指向的第二数据块,写线程更新第二数据块中的数据,并修改读指针的当前指向为指向第二数据块,写线程如果确定出用于读取第一数据块的读线程的线程锁状态为非锁定,则写线程更新第一数据块中的数据,上述由于如果用于读取第一数据块的读线程的线程锁状态为非锁定,则说明已没有读线程对第一数据块进行读操作,在此情况下,写线程才对第一数据块进行更新操作,从而避免双缓冲中所存在的读写冲突,进而提高了程序运行性能。
可选的,在上述技术方案的基础上,写线程更新第二数据块中的数据,并修改读指针的当前指向为指向第二数据块之后,具体还可以包括:如果用于读取第一数据块的读线程的线程锁状态为锁定,则写线程不更新第一数据块中的数据。
在本发明的实施例中,写线程如果确定出用于读取第一数据块的读线程的线程锁状态为锁定,则可以说明还存在读线程对第一数据进行读操作,此时,如果写线程更新第一数据块中的数据,则将可能导致出现读写冲突,基于上述,写线程将不会更新第一数据块中的数据。需要说明的是,只要存在一个读线程的线程锁状态为锁定,则写线程便不会更新第一数据块中的数据。
可选的,在上述技术方案的基础上,第一数据块的读线程的线程锁状态存储于第一数据块的线程锁状态列表中。
在本发明的实施例中,为了便于获取读线程的线程锁状态,可在第一数据块中设置线程锁状态列表,线程锁状态列表存储用于读取第一数据块的读线程的线程锁状态。根据前文所述可知,由于第一数据块表示的是读指针当前指向的数据块,而双缓冲中包括两个数据块,这两个数据块根据读指针当前指向的不同,均可能为第一数据块,因此,上述第一数据块中设置线程锁状态列表,线程锁状态列表存储用于读取第一数据块的读线程的线程锁状态可以理解为:双缓冲中两个数据块分别设置线程锁状态列表,线程锁状态列表存储用于读取该数据块的读线程的线程锁状态,即对于每个数据块,该数据块中设置线程锁状态列表,线程锁状态列表存储用于读取该数据块的读线程的线程锁状态,即如果读指针当前指向的是该数据块,此时该数据块即为第一数据块,则写指针在更新第一数据块中的数据时,可以根据第一数据块设置的线程锁状态列表,获取各个读线程的线程锁状态,再确定各个读线程的线程锁状态是否为非锁定,如果全部读线程的线程锁状态为非锁定,则写线程更新第一数据块中的数据。如果存在至少一个读线程的线程锁状态为锁定,则写线程不更新第一数据块中的数据。
示例性的,如双缓冲中的两个数据块分别为数据块A和数据块B,由于第一数据块为读指针当前指向的数据块,而数据块A和数据块B均可能是读指针当前指向的数据块,因此,第一数据块设置线程锁状态列表,线程锁状态列表存储用于读取第一数据块的读线程的线程锁状态指数据块A和数据块B分别设置线程锁状态列表A和线程锁状态列表B,线程锁状态列表A存储用于读取数据块A的读线程的线程锁状态,线程锁状态列表B存储用于读取数据块B的读线程的线程锁状态。
为了更好的理解本发明实施例所提供的技术方案,下面通过具体示例进行说明,具体的:
如图8所示,给出了一种数据更新方法的应用示意图。图8中存在三个读线程和一个写线程,三个读线程分别为读线程1、读线程2和读线程3。双缓冲中包括的两个数据块分别为数据块A和数据块B。数据块A设置线程锁状态列表,线程锁状态列表存储用于读取数据块A的各个读线程(包括读线程1、读线程2和读线程3)所对应的线程锁状态;数据块B设置线程锁状态列表,线程锁状态列表存储用于读取数据块B的各个读线程(包括读线程1、读线程2和读线程3)所对应的线程锁状态。数据块A设置的线程锁状态列表中,读线程1的线程锁状态、读线程2的线程锁状态和读线程3的线程锁状态均为非锁定。数据块B设置的线程锁状态列表中,读线程1的线程锁状态、读线程2的线程锁状态和读线程3的线程锁状态均为非锁定。
写线程确定读指针当前指向的数据块为数据块A,即数据块A为第一数据块,读指针当年未指向的数据块为数据块B,即数据块B为第二数据块。写线程更新第二数据块(即数据块B)中的数据,并修改读指针当前指向为指向第二数据块(即数据块B)。写线程确定用于读取第一数据块(即数据块A)的各个线程锁状态均为非锁定,即确定用于读取第一数据块(即数据块A)的读线程1、读线程2和读线程3所对应的线程锁状态均为非锁定,则写线程更新第第一数据块(即数据块A)中的数据。至此完成对双缓冲中数据块A和数据块B的更新操作。
图9为本发明实施例提供的一种数据读取方法的流程图,本实施例可适用于并发读写场景下对数据更新的情况,该方法可以由数据读取装置来执行,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如典型的是服务器和计算机等。如图9所示,该方法具体包括如下步骤:
步骤210、读线程将线程锁状态设置为锁定。
在本发明的实施例中,为了避免出现读写冲突,读线程在读取读指针当前指向的数据块中的数据前,将线程锁状态设置为锁定,上述使得如果写线程想对读指针当前指向的该数据块进行更新操作,将由于存在读线程的线程锁状态为锁定而不对该数据块进行更新操作。上述读线程通过进行加锁操作将线程锁状态设置为锁定。
步骤220、读线程读取读指针所指向的数据块中的数据。
步骤230、数据读取完毕,读线程将线程锁状态修改为非锁定。
在本发明的实施例中,读线程将通过读指针读取读指针所指向的数据块中的数据。由于双缓冲中存在两个数据块,这两个数据块均可能为读指针所指向的数据块,因此,读线程通过读指针读取读指针所指向的数据块中的数据中数据块可以为双缓冲中两个数据块中的任何一个。示例性的,如双缓冲中存在的两个数据块分别为数据块A和数据块B,如果读指针所指向的数据块为数据块A,则读线程将读取数据块A中的数据。如果读指针所指向的数据块为数据块B,则读线程将读取数据块B中的数据。
读线程在数据读取完毕后,该读线程将线程锁状态由锁定修改为非锁定。需要说明的是,读线程在对数据块中的数据进行读取过程中,该读线程的线程锁状态将始终保持锁定。步骤210-步骤230适用于每个读线程,换句话说,每个读线程读取读指针所指向的数据块中的数据前,将线程锁状态设置为锁定,该读线程在对数据块中的数据进行读取过程中,该读线程的线程锁状态始终保持锁定,该读线程在对数据读取完毕后,再将该读线程的线程锁状态由锁定修改为非锁定。还需要说明的是,读线程通过进行解锁操作,将线程锁状态修改为非锁定。
可选的,在上述技术方案的基础上,读线程将线程锁设置为锁定,具体可以包括:如果已生成线程锁,则读线程将线程锁状态设置为锁定;如果未生成线程锁,则读线程生成线程锁后,将线程锁状态设置为锁定。
在本发明的实施例中,读线程如果确定已生成线程锁,则读线程可将线程锁状态设置为锁定。相反的,如果确定未生成线程锁,则读线程先生成线程锁,再将该线程锁状态设置为锁定。需要说明的是,读线程通过进行加锁操作将线程锁状态设置为锁定。
可选的,在上述技术方案的基础上,读线程的线程锁状态存储于数据块的线程锁状态列表中。
在本发明的实施例中,每个读线程的线程锁状态可存储于线程锁状态列表中,即线程锁状态列表存储有各个读线程的线程锁状态。同时,双缓冲中两个数据块分别设置有线程锁状态列表,这使得写线程在对双缓冲中两个数据块进行更新操作时,写线程可以通过调用读指针所指向的数据块中的线程锁状态列表,确定读线程的线程锁状态。
示例性的,如双缓冲中两个数据块分别为数据块A和数据块B,读线程包括读线程1、读线程2和读线程3,数据块A设置有线程锁状态列表A,数据块设置有线程锁状态列表B,线程锁状态列表A存储有各个读线程在读取数据块A时所形成的对应的线程锁状态,即线程锁状态列表A存储有读线程1在读取数据块A时形成的线程锁状态1,读线程2在读取数据块A时形成的线程锁状态2以及读线程3在读取数据块A时形成的线程锁状态3。同样的,线程锁状态列表B存储有各个读线程在读取数据块B时所形成的对应的线程锁状态,即线程锁状态列表B存储有读线程1在读取数据块B时形成的线程锁状态1,读线程2在读取数据块B时形成的线程锁状态2以及读线程3在读取数据块B时形成的线程锁状态3。
本实施例的技术方案,通过读线程将线程锁状态设置为锁定,读线程读取读指针所指向的数据块中的数据,数据读取完毕,读线程将线程锁状态修改为非锁定,上述读线程在对数据块进行读操作时,生成读线程的线程锁状态,读线程的线程锁状态为写线程对数据块进行更新操作时,为避免出现读写冲突所采用的方式提供了依据。
可选的,在上述技术方案的基础上,读线程将线程锁状态设置为锁定之前,具体还可以包括:读线程获取读指针所指向的数据块。
在本发明的实施例中,由于读线程的线程锁状态分别存储于双缓冲中两个数据块中,因此,在将该读线程的线程锁状态设置为锁定之前,该读线程需要获取读指针所指向的数据块,以便该读线程可以对存储于该数据块中的该读线程的线程锁状态进行设置,读线程在读取读指针所指向的数据块中的数据之前,该读线程将该读线程在该数据块中的线程锁状态设置为锁定,在数据读取完毕后,再将该读线程在该数据块中的线程锁状态由锁定修改为非锁定。
示例性的,如双缓冲中两个数据块分别为数据块A和数据块B,读指针所指向的数据块为数据块A,则读线程获取读指针所指向的数据块为数据块A,读线程在读取读指针所指向的数据块A中的数据之前,该读线程将该读线程在该数据块A中的线程锁状态设置为锁定,在数据读取完毕后,再将该读线程在该数据块A中的线程锁状态由锁定修改为非锁定。
图10为本发明实施例提供的另一种数据读取方法的流程图,本实施例可适用于并发读写场景下对数据更新的情况,该方法可以由数据读取装置来执行,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如典型的是服务器和计算机等。如图10所示,该方法具体包括如下步骤:
步骤310、读线程获取读指针所指向的数据块。
步骤320、读线程确定读线程的线程锁是否已生成;若是,则执行步骤330;若否,则执行步骤340。
步骤330、读线程将线程锁状态设置为锁定,并转入执行步骤350。
步骤340、读线程生成线程锁后,将线程锁状态设置为锁定,并转入执行步骤350。
步骤350、读线程读取读指针所指向的数据块中的数据。
步骤360、读线程在数据读取完毕后,将线程锁状态修改为非锁定。
在本发明的实施例中,读线程的线程锁状态存储于数据块的线程锁状态列表中。读线程获取读指针所指向的数据块的目的在于:读线程需要设置该数据块中存储的该读线程的线程锁状态。为了更好的理解本发明实施例所提供的技术方案,下面将通过具体示例进行说明,具体的:
如图11所示,给出了一种数据读取方法的应用示意图。图11中存在三个读线程和一个写线程,三个读线程分别为读线程1、读线程2和读线程3。双缓冲中包括的两个数据块分别为数据块A和数据块B。数据块A设置线程锁状态列表,线程锁状态列表存储用于读取数据块A的各个读线程(包括读线程1、读线程2和读线程3)所对应的线程锁状态;数据块B设置线程锁状态列表,线程锁状态列表存储用于读取数据块B的各个读线程(包括读线程1、读线程2和读线程3)所对应的线程锁状态。读指针所指向的数据块为数据块A。
针对读线程1来说,读线程1获取读指针所指向的数据块A,读线程1确定线程锁是否已生成,如果已生成线程锁,则读线程1将线程锁状态设置为锁定,如果未生成线程锁,则读线程1生成线程锁后,将线程锁状态设置为锁定。读线程1在将线程锁状态设置为锁定后,读线程1读取读指针所指向的数据块A中的数据,在数据读取完毕后,读线程1再将线程锁状态修改为非锁定。读线程1的线程锁状态将存储于数据块A设置的线程锁状态列表中。
上述为读线程1所进行的数据读取操作过程,对于图11中所提及的读线程2和读线程3来说,两者将按照与读线程1相同的方式进行数据读取操作,在此不再具体赘述。
本实施例的技术方案,通过读线程获取读指针所指向的数据块,读线程在读取读指针所指向的数据块中的数据前,读线程如果确定已生成线程锁,则读线程将线程锁状态设置为锁定,读线程如果确定未生成线程锁,则读线程生成线程锁后,将线程锁状态设置为锁定,读线程在将线程锁状态设置为锁定后,读线程读取读指针所指向的数据块中的数据,读线程在数据读取完毕后,将线程锁状态修改为非锁定,上述读线程在对数据块进行读操作时,生成读线程的线程锁状态,读线程的线程锁状态为写线程对数据块进行更新操作时,为避免出现读写冲突所采用的方式提供了依据。
图12为本发明实施例提供的一种数据更新装置的结构示意图,本实施例可适用于并发读写场景下对数据更新的情况,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如典型的是服务器和计算机等。如图12所示,该装置具体包括:
读指针指向确定模块410,用于写线程确定读指针当前指向的第一数据块和未指向的第二数据块。
第二数据块更新模块420,用于写线程更新第二数据块中的数据,并修改读指针的当前指向为指向第二数据块。
第一数据块更新模块430,用于如果读取第一数据块的读线程的线程锁状态为非锁定,则写线程更新第一数据块中的数据。
本实施例的技术方案,通过写线程确定读指针当前指向的第一数据块和未指向的第二数据块,写线程更新第二数据块中的数据,并修改读指针的当前指向为指向第二数据块,写线程如果确定出用于读取第一数据块的读线程的线程锁状态为非锁定,则写线程更新第一数据块中的数据,上述由于如果用于读取第一数据块的读线程的线程锁状态为非锁定,则说明已没有读线程对第一数据块进行读操作,在此情况下,写线程才对第一数据块进行更新操作,从而避免双缓冲中所存在的读写冲突,进而提高了程序运行性能。
可选的,在上述技术方案的基础上,该装置具体还可以包括:
第一数据块未更新模块,用于如果用于读取第一数据块的读线程的线程锁状态为锁定,则写线程不更新第一数据块中的数据。
可选的,在上述技术方案的基础上,第一数据块的读线程的线程锁状态存储于第一数据块的线程锁状态列表中。
本发明实施例所提供的配置于设备的数据更新装置可执行本发明任意实施例所提供的应用于设备的数据更新方法,具备执行方法相应的功能模块和有益效果。
图13为本发明实施例提供的一种数据读取装置的结构示意图,本实施例可适用于并发读写场景下对数据更新的情况,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如典型的是服务器和计算机等。如图13所示,该装置具体包括:
锁定状态设置模块510,用于读线程将线程锁状态设置为锁定。
数据读取模块520,用于读线程读取读指针所指向的数据块中的数据。
非锁定状态设置模块530,用于数据读取完毕,读线程将线程锁状态修改为非锁定。
本实施例的技术方案,通过读线程将线程锁状态设置为锁定,读线程读取读指针所指向的数据块中的数据,数据读取完毕,读线程将线程锁状态修改为非锁定,上述读线程在对数据块进行读操作时,生成读线程的线程锁状态,读线程的线程锁状态为写线程对数据块进行更新操作时,为避免出现读写冲突所采用的方式提供了依据。
可选的,在上述技术方案的基础上,该装置具体还可以包括:
数据库获取模块,用于读线程获取读指针所指向的数据块。
可选的,在上述技术方案的基础上,锁定状态设置模块510,具体可以用于:
如果已生成线程锁,则读线程将线程锁状态设置为锁定;如果未生成线程锁,则读线程生成线程锁后,将线程锁状态设置为锁定。
可选的,在上述技术方案的基础上,读线程的线程锁状态存储于数据块的线程锁状态列表中。
本发明实施例所提供的配置于设备的数据读取装置可执行本发明任意实施例所提供的应用于设备的数据读取方法,具备执行方法相应的功能模块和有益效果。
图14为本发明实施例提供的一种设备的结构示意图。图14显示的设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图14所示,本发明实施例提供的设备,包括处理器61、存储器62、输入装置63和输出装置64;设备中处理器61的数量可以是一个或多个,图14中以一个处理器61为例;设备中的处理器61、存储器62、输入装置63和输出装置64可以通过总线或其他方式连接,图14中以通过总线连接为例。
存储器62作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的设备数据更新方法和数据读取方法对应的程序指令/模块(例如,使用数据更新装置中的读指针指向确定模块410、第二数据块更新模块420和第一数据块更新模块430,以及,使用数据读取装置中的锁定状态设置模块510、数据读取模块520和非锁定状态设置模块530)。处理器61通过运行存储在存储器62中的软件程序、指令以及模块,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的应用于设备的数据更新方法和数据读取方法。
存储器62可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储器62可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器62可进一步包括相对于处理器61远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置63可用于接收用户输入的数字或字符信息,以产生与设备的用户设置以及功能控制有关的键信号输入。输出装置64可包括显示屏等显示设备。
当然,本领域技术人员可以理解,处理器还可以实现本发明任意实施例所提供应用于设备的数据更新方法和数据读取方法的技术方案。该设备的硬件结构以及功能可参见实施例的内容解释。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例所提供的一种数据更新方法,该方法包括:
写线程确定读指针当前指向的第一数据块和未指向的第二数据块。
写线程更新第二数据块中的数据,并修改读指针的当前指向为指向第二数据块。
如果用于读取第一数据块的读线程的线程锁状态为非锁定,则写线程更新第一数据块中的数据。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、射频等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,例如Unix、Linux和Windows等。程序代码可以在计算机或服务器上执行。
本发明实施例还提供了另一种计算机可读存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种数据读取方法,该方法包括:
读线程将线程锁状态设置为锁定。
读线程读取读指针所指向的数据块中的数据。
数据读取完毕,读线程将线程锁状态修改为非锁定。
当然,本发明实施例所提供的一种计算机可读存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的设备的数据更新方法和数据读取方法中的相关操作。对存储介质的介绍可参见实施例中的内容解释。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (11)
1.一种直播平台数据更新方法,其特征在于,包括:
写线程确定读指针当前指向的第一数据块和未指向的第二数据块;
所述写线程更新所述第二数据块中的数据,并修改所述读指针的当前指向为指向所述第二数据块;
如果用于读取第一数据块的读线程的线程锁状态为非锁定,则所述写线程更新所述第一数据块中的数据;
所述读线程调用所述读指针读取所述读指针当前指向的所述第一数据块中的数据前,所述读线程进行加锁操作,在数据读取完毕后,所述读线程进行解锁操作;
所述第一数据块中设置线程锁状态列表,用于读取第一数据块的读线程的线程锁状态。
2.根据权利要求1所述的方法,其特征在于,所述写线程更新所述第二数据块中的数据,并修改所述读指针的当前指向为指向所述第二数据块之后,还包括:
如果用于读取第一数据块的读线程的线程锁状态为锁定,则所述写线程不更新所述第一数据块中的数据。
3.根据权利要求1或2所述的方法,其特征在于,所述第一数据块的读线程的线程锁状态存储于第一数据块的线程锁状态列表中。
4.一种数据读取方法,其特征在于,包括:
读线程将线程锁状态设置为锁定;
所述读线程读取读指针所指向的数据块中的数据;
数据读取完毕,所述读线程将线程锁状态修改为非锁定;
执行权利要求1-3任一项所述直播平台数据更新方法。
5.根据权利要求4所述的方法,其特征在于,所述读线程将线程锁状态设置为锁定之前,还包括:
所述读线程获取所述读指针所指向的数据块。
6.根据权利要求4或5所述的方法,其特征在于,所述读线程将线程锁状态设置为锁定,包括:
如果已生成线程锁,则读线程将线程锁状态设置为锁定;如果未生成线程锁,则所述读线程生成线程锁后,将线程锁状态设置为锁定。
7.根据权利要求4或5所述的方法,其特征在于,所述读线程的线程锁状态存储于数据块的线程锁状态列表中。
8.一种直播平台数据更新装置,其特征在于,包括:
读指针指向确定模块,用于写线程确定读指针当前指向的第一数据块和未指向的第二数据块;
第二数据块更新模块,用于所述写线程更新所述第二数据块中的数据,并修改所述读指针的当前指向为指向所述第二数据块;
第一数据块更新模块,用于如果用于读取第一数据块的读线程的线程锁状态为非锁定,则所述写线程更新所述第一数据块中的数据;
所述读线程调用所述读指针读取所述读指针当前指向的所述第一数据块中的数据前,所述读线程进行加锁操作,在数据读取完毕后,所述读线程进行解锁操作;
所述第一数据块中设置线程锁状态列表,用于读取第一数据块的读线程的线程锁状态。
9.一种数据读取装置,其特征在于,包括:
锁定状态设置模块,用于读线程将线程锁状态设置为锁定;
数据读取模块,用于所述读线程读取读指针所指向的数据块中的数据;
非锁定状态设置模块,用于数据读取完毕,所述读线程将线程锁状态修改为非锁定;
其中,所述一种数据读取装置还用于执行权利要求4所述的数据读取方法。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7任一所述的方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910256706.7A CN109976675B (zh) | 2019-04-01 | 2019-04-01 | 一种数据更新、读取方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910256706.7A CN109976675B (zh) | 2019-04-01 | 2019-04-01 | 一种数据更新、读取方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109976675A CN109976675A (zh) | 2019-07-05 |
CN109976675B true CN109976675B (zh) | 2023-02-03 |
Family
ID=67082132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910256706.7A Active CN109976675B (zh) | 2019-04-01 | 2019-04-01 | 一种数据更新、读取方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109976675B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750858A (zh) * | 2015-04-16 | 2015-07-01 | 成都影泰科技有限公司 | 一种基于网络的数据存储方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7032071B2 (en) * | 2002-05-21 | 2006-04-18 | Sun Microsystems, Inc. | Method, system, and program for using buffers to provide property value information for a device |
US20110145515A1 (en) * | 2009-12-14 | 2011-06-16 | Advanced Micro Devices, Inc. | Method for modifying a shared data queue and processor configured to implement same |
US9176872B2 (en) * | 2013-02-25 | 2015-11-03 | Barco N.V. | Wait-free algorithm for inter-core, inter-process, or inter-task communication |
US10684986B2 (en) * | 2013-08-28 | 2020-06-16 | Biosense Webster (Israel) Ltd. | Double buffering with atomic transactions for the persistent storage of real-time data flows |
US9720742B2 (en) * | 2014-05-15 | 2017-08-01 | GM Global Technology Operations LLC | Service and system supporting coherent data access on multicore controller |
CN105974837B (zh) * | 2015-12-31 | 2018-08-28 | 西安航天精密机电研究所 | 基于1553b总线防读写冲突的数据产生及传输方法 |
CN106407028B (zh) * | 2016-08-26 | 2019-02-19 | 佛山智能装备技术研究院 | 一种双缓冲式的机器人软件日志存储方法 |
CN107807858A (zh) * | 2017-10-30 | 2018-03-16 | 北京神州绿盟信息安全科技股份有限公司 | 一种读写锁操作方法及系统、设备 |
CN109271258B (zh) * | 2018-08-28 | 2020-11-17 | 百度在线网络技术(北京)有限公司 | 读写锁重入的实现方法、装置、终端及存储介质 |
CN109271193B (zh) * | 2018-10-08 | 2023-01-13 | 广州市百果园信息技术有限公司 | 一种数据处理方法、装置、设备及存储介质 |
-
2019
- 2019-04-01 CN CN201910256706.7A patent/CN109976675B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750858A (zh) * | 2015-04-16 | 2015-07-01 | 成都影泰科技有限公司 | 一种基于网络的数据存储方法 |
Non-Patent Citations (1)
Title |
---|
"生产者/消费者"模式初探;编程随想;《程序员》;20090930;第70页第五节 * |
Also Published As
Publication number | Publication date |
---|---|
CN109976675A (zh) | 2019-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8239871B2 (en) | Managing timeout in a multithreaded system by instantiating a timer object having scheduled expiration time and set of timeout handling information | |
US8195702B2 (en) | Online index builds and rebuilds without blocking locks | |
US8112528B2 (en) | Mechanisms for providing exclusive access to shared resources in a database | |
CN105511969B (zh) | 一种跨进程的线程间进行互斥的方法 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
US8719845B2 (en) | Sharing and synchronization of objects | |
US8495642B2 (en) | Mechanism for priority inheritance for read/write locks | |
CN113010325B (zh) | 一种读写锁的实现方法、装置及电子设备 | |
US9582340B2 (en) | File lock | |
CN111459691A (zh) | 共享内存的读写方法及装置 | |
US20120059997A1 (en) | Apparatus and method for detecting data race | |
US8341368B2 (en) | Automatic reallocation of structured external storage structures | |
CN109976675B (zh) | 一种数据更新、读取方法、装置、设备及存储介质 | |
CN115951844B (zh) | 分布式文件系统的文件锁管理方法、设备及介质 | |
US9513973B2 (en) | Device and method for synchronizing tasks executed in parallel on a platform comprising several calculation units | |
US9135058B2 (en) | Method for managing tasks in a microprocessor or in a microprocessor assembly | |
US20170236062A1 (en) | Thread coordination in a rule engine using a state machine | |
Taubenfeld | Contention-sensitive data structures and algorithms | |
KR101448861B1 (ko) | 동기적 메시지 기반 대량 병렬처리 시스템 | |
Zuepke et al. | Deterministic futexes revisited | |
EP2913749A1 (en) | Method and system for focus management in a software application | |
US9563484B2 (en) | Concurrent computing with reduced locking requirements for shared data | |
CN115145737B (zh) | 动态加锁方法、电子设备及计算机可读存储介质 | |
CN110764880B (zh) | 一种基于原子操作的三态控制方法 | |
CN112860719B (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231009 Address after: 31a, 15th floor, building 30, maple commercial city, bangrang Road, Brazil Patentee after: Baiguoyuan Technology (Singapore) Co.,Ltd. Address before: 511400 floor 5-13, West Tower, building C, 274 Xingtai Road, Shiqiao street, Panyu District, Guangzhou City, Guangdong Province Patentee before: GUANGZHOU BAIGUOYUAN INFORMATION TECHNOLOGY Co.,Ltd. |