CN106990994B - 树形原子状态机及其控制逻辑接口的实现方法及装置 - Google Patents
树形原子状态机及其控制逻辑接口的实现方法及装置 Download PDFInfo
- Publication number
- CN106990994B CN106990994B CN201710129216.1A CN201710129216A CN106990994B CN 106990994 B CN106990994 B CN 106990994B CN 201710129216 A CN201710129216 A CN 201710129216A CN 106990994 B CN106990994 B CN 106990994B
- Authority
- CN
- China
- Prior art keywords
- state machine
- tree
- codes
- node
- atom state
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/313—Logic programming, e.g. PROLOG programming language
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了树形原子状态机、树形原子状态机控制逻辑接口的实现方法及装置,对Phaser Accumulator的分治思想进行了改进,所述树形原子状态机通过拆分访问点的方式在一定程度上可以降低修改的复杂度,例如在使用的并发调用方法不需要原子状态机实时的精确状态时,只需要判断每一次的向后转移操作是否成功即可,所以无需引入Phaser Accumulator的读取复杂度。使用该树形原子状态机可以在控制对于原子状态机实体的局部读写的并发上限的同时降低修改操作的复杂度,从而提高修改效率。
Description
技术领域
本发明涉及并发程序设计方法,尤其涉及树形原子状态机、树形原子状态机控制逻辑接口的实现方法及装置。
背景技术
控制原子状态机实体的局部读写的并发上限是当前并发程序设计中受到广泛关注的问题。在控制原子状态机实体的局部读写的并发上限上,Phaser Accumulator采用了分治的思想,将一个整数拆分成多个单元,从而增加了对整数增加的“带宽”,但对于读取的复杂度却增加了,因为读取操作需要遍历所有的单元。
发明内容
本发明的目的是提供树形原子状态机、树形原子状态机控制逻辑接口的实现方法及装置,旨在解决控制原子状态机实体的局部读写的并发上限的同时降低读取的复杂度的问题。
本发明解决其技术问题所采用的技术方案是:
一种树形原子状态机,每个树形原子状态机实体包括若干个节点实体,每个节点实体维护一个原子状态机实体和一个节点实体的引用;
所述原子状态机实体存在n种状态可以一一映射到小于n的全部非负整数,n为正整数;
所述节点实体的引用用于提供节点实体的寻址方式。
在上述实施例的基础上,进一步地,所述节点实体的引用由编程语言确定。
在上述实施例的基础上,进一步地,当编程语言为C++时,所述节点实体的引用是指针或引用;当编程语言为Java时,所述节点实体的引用是引用或特定标识符。
在上述任意实施例的基础上,进一步地,每个节点实体维护的原子状态机实体存在MAX_N种状态可以一一映射到小于MAX_N的全部非负整数,MAX_N为正整数。
在上述任意实施例的基础上,进一步地,当一个节点实体维护的节点实体的引用有效,且该节点实体无效时,对应该节点实体的权值为1;
所述树形原子状态机实体表示的状态到整数的映射值等于其全部节点表示的状态到整数的映射值之和。
一种上述任一项实施例中树形原子状态机控制逻辑接口的实现方法,包括:
语义需求文档获取步骤:
接收用户对编程语言的选择指令,确定编程语言;
查询与编程语言相应的语义需求文档,所述语义需求文档包括逻辑接口和与逻辑接口相应的语义需求;所述逻辑接口包括线性缓冲区逻辑接口、树形原子状态机初始化器逻辑接口、树形原子状态转移器逻辑接口中的一种或多种;
代码获取步骤:
获取数据结构;所述数据结构包括可堆叠线性缓冲区数据结构和树形原子状态机节点数据结构;
获取树形原子状态机过程;所述树形原子状态机过程包括可堆叠线性缓冲区-取出过程、可堆叠线性缓冲区-加入过程、树形原子状态机-节点-初始化过程、树形原子状态机-初始化器-初始化过程、树形原子状态机-转移器-增加过程、树形原子状态机-转移器-条件减少过程;
查询数据结构的代码;
根据数据结构的代码,获取可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码;
根据语义需求文档,利用可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码,获取与逻辑接口相应的树形原子状态机初始化器的代码、树形原子状态转移器的代码;
调用步骤:
确定调用代码的类型;所述调用代码的类型包括树形原子状态机初始化器的代码和树形原子状态转移器的代码;
当调用代码的类型为树形原子状态机初始化器的代码时,调用树形原子状态机初始化器的代码,以实现用户需求;
当调用代码的类型为树形原子状态转移器的代码时,调用树形原子状态转移器的代码,以实现用户需求。
一种上述任一项实施例中树形原子状态机控制逻辑接口的实现装置,其特征在于,包括:
语义需求文档获取模块,用于:
接收用户对编程语言的选择指令,确定编程语言;
查询与编程语言相应的语义需求文档,所述语义需求文档包括逻辑接口和与逻辑接口相应的语义需求;所述逻辑接口包括线性缓冲区逻辑接口、树形原子状态机初始化器逻辑接口、树形原子状态转移器逻辑接口中的一种或多种;
代码获取模块,用于:
获取数据结构;所述数据结构包括可堆叠线性缓冲区数据结构和树形原子状态机节点数据结构;
获取树形原子状态机过程;所述树形原子状态机过程包括可堆叠线性缓冲区-取出过程、可堆叠线性缓冲区-加入过程、树形原子状态机-节点-初始化过程、树形原子状态机-初始化器-初始化过程、树形原子状态机-转移器-增加过程、树形原子状态机-转移器-条件减少过程;
查询数据结构的代码;
根据数据结构的代码,获取可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码;
根据语义需求文档,利用可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码,获取与逻辑接口相应的树形原子状态机初始化器的代码、树形原子状态转移器的代码;
调用模块,用于:
确定调用代码的类型;所述调用代码的类型包括树形原子状态机初始化器的代码和树形原子状态转移器的代码;
当调用代码的类型为树形原子状态机初始化器的代码时,调用树形原子状态机初始化器的代码,以实现用户需求;
当调用代码的类型为树形原子状态转移器的代码时,调用树形原子状态转移器的代码,以实现用户需求。
本发明的有益效果是:
本发明提供了树形原子状态机、树形原子状态机控制逻辑接口的实现方法及装置,对Phaser Accumulator的分治思想进行了改进,所述树形原子状态机通过拆分访问点的方式在一定程度上可以降低修改的复杂度,例如在使用的并发调用方法不需要原子状态机实时的精确状态时,只需要判断每一次的向后转移操作是否成功即可,所以无需引入Phaser Accumulator的读取复杂度。使用该树形原子状态机可以在控制对于原子状态机实体的局部读写的并发上限的同时降低修改操作的复杂度,从而提高修改效率。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1示出了本发明实施例提供的树形原子状态机的结构示意图;
图2示出了本发明实施例提供的树形原子状态机控制逻辑接口的实现方法的流程示意图;
图3示出了本发明实施例提供的树形原子状态机退化为链式结构的初始形态示意图;
图4示出了本发明实施例提供的树形原子状态机控制逻辑接口的实现装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不限定本发明。
具体实施例一
本发明实施例提供了一种树形原子状态机,每个树形原子状态机实体包括若干个节点实体,每个节点实体维护一个原子状态机实体和一个节点实体的引用;所述原子状态机实体存在n种状态可以一一映射到小于n的全部非负整数,n为正整数;所述节点实体的引用用于提供节点实体的寻址方式。如图1所示,Node就是树形原子计数器节点实体,节点实体维护的原子状态机实体不做体现,箭头就是节点实体维护的引用,最上面的根节点维护的是无效引用,所以不引出箭头。
本发明实施例中,每个树形原子状态机实体包括若干个节点实体,此处若干个可以为1个、2个或多个。
以一个树形原子状态机实体包含的节点实体维护的引用为“边”(Edge),以所述树形原子状态机实体包含的节点实体为“顶点”(Vertex),可以构造一颗有根树(RootedTree,计算机科学、离散数学、图论中的概念),其中根节点(Root)所对应的节点实体维护一个无效引用。
本发明实施例对Phaser Accumulator的分治思想进行了改进,所述树形原子状态机通过拆分访问点的方式在一定程度上可以降低修改的复杂度,例如在使用的并发调用方法不需要原子状态机实时的精确状态时,只需要判断每一次的向后转移操作是否成功即可,所以无需引入Phaser Accumulator的读取复杂度。使用该树形原子状态机可以在控制对于原子状态机实体的局部读写的并发上限的同时降低修改操作的复杂度,从而提高修改效率。
本发明实施例对编程语言不做限定,用户可以根据自身喜好选用编程语言,优选的,所述编程语言可以为C++、JAVA、或Python。
本发明对节点实体的引用不做限定,其可以为指针、引用或特定标识符。优选的,所述节点实体的引用由编程语言确定。在不同的编程语言环境下,节点实体的引用可以是不同的。
优选的,当编程语言为C++时,所述节点实体的引用可以是指针或引用;当编程语言为Java时,所述节点实体的引用可以是引用或特定标识符。
一个节点实体维护的原子状态机的状态上限未定义。优选的,一个节点实体维护的原子状态机可以存在状态上限MAX_N,即每个节点实体维护的原子状态机实体可以存在MAX_N种状态可以一一映射到小于MAX_N的全部非负整数,MAX_N为正整数。
本发明实施例在一个节点实体所维护的引用有效、且该节点实体无效时,对该节点实体的权值不做限定。优选的,当一个节点实体维护的节点实体的引用有效,且该节点实体无效时,对应该节点实体的权值为1;在此情形中,一个树形原子状态机实体表示的状态到整数的映射值等于其全部节点表示的状态到整数的映射值之和。
具体实施例二
如图2所示,本发明实施例提供了一种具体实施例一中任一种树形原子状态机控制逻辑接口的实现方法,包括:
语义需求文档获取步骤S101:
接收用户对编程语言的选择指令,确定编程语言;
查询与编程语言相应的语义需求文档,所述语义需求文档包括逻辑接口和与逻辑接口相应的语义需求;所述逻辑接口包括线性缓冲区逻辑接口、树形原子状态机初始化器逻辑接口、树形原子状态转移器逻辑接口中的一种或多种;
代码获取步骤S102:
获取数据结构;所述数据结构包括可堆叠线性缓冲区数据结构和树形原子状态机节点数据结构;
获取树形原子状态机过程;所述树形原子状态机过程包括可堆叠线性缓冲区-取出过程、可堆叠线性缓冲区-加入过程、树形原子状态机-节点-初始化过程、树形原子状态机-初始化器-初始化过程、树形原子状态机-转移器-增加过程、树形原子状态机-转移器-条件减少过程;
查询数据结构的代码;
根据数据结构的代码,获取可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码;
根据语义需求文档,利用可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码,获取与逻辑接口相应的树形原子状态机初始化器的代码、树形原子状态转移器的代码;
调用步骤S103:
确定调用代码的类型;所述调用代码的类型包括树形原子状态机初始化器的代码和树形原子状态转移器的代码;
当调用代码的类型为树形原子状态机初始化器的代码时,调用树形原子状态机初始化器的代码,以实现用户需求;
当调用代码的类型为树形原子状态转移器的代码时,调用树形原子状态转移器的代码,以实现用户需求。
本发明实施例所提供的树形原子状态机控制逻辑接口的实现方法,对PhaserAccumulator的分治思想进行了改进,在并发调用方法不需要原子状态机实时的精确状态时,只需要判断每一次的向后转移操作是否成功即可,所以无需引入Phaser Accumulator的读取复杂度。从而在控制对于原子状态机实体的局部读写的并发上限的同时降低修改操作的复杂度,从而提高修改效率。
可堆叠线性缓冲区(Stacked Linear Buffer)是线性缓冲区的一种FIFO(First-in-first-out)实现。对于某种类型实体E的可堆叠线性缓冲区,每个类型E的实体可以堆叠任意多个。可堆叠线性缓冲区的取出算法对应了线性缓冲区语义逻辑的取出语义。可堆叠线性缓冲区是上述算法中使用的线性缓冲区的优选方案。可堆叠线性缓冲区是一个用户定义的线性栈数据结构。该线性栈可使用链表、数组、块状链表等实现,其内部若干维护E类型实体与表示其堆叠数量的整数的聚合体,其类型记作Pair。聚合体中的E类型实体记作e,表示其堆叠数量的整数记作cnt。
本发明实施例中,对于逻辑接口的限定可以如下所述。
线性缓冲区逻辑接口:一个线性缓冲区(Linear Buffer)实体是存储了若干某种类型实体的、可逐个取出的容器,具有取出(Fetch)的语义。对于某种类型实体E的线性缓冲区,如果可以断言该缓冲区非空,用户对其执行取出操作期望得到一个E的实体。一个线性缓冲区不一定存在上界;对于同一个线性缓冲区的先后两次取出操作可能得到相同的实体。
原子状态机(Atomic State Machine)是支持原子操作的状态机,存在n种状态可以一一映射到小于n的全部非负整数;n为正整数。
原子状态机初始化器逻辑接口(Atomic State Machine InitializerInterface)包含初始化(Initialize)的语义,其执行依赖于一个非负整数n,其作用包含初始化一个具有初始状态映射数值为n的原子状态机实体,输出一个线性缓冲区实体;对所述线性缓冲区实体执行的前(n+1)次取出操作中的每一次均应得到一个依赖于所述原子状态机的原子状态机向后转移器实体。
原子状态向前转移器逻辑接口(Atomic State Forward Transfer Interface)包含向前转移(Forward Transfer)的语义。一个原子状态向前转移器实体对应一个状态映射数值为n的原子状态机实体,其向前转移语义的执行依赖于一个非负整数m,其作用包含原子地将所述原子状态机实体状态转移至数值(n+m)所映射的状态,输出一个线性缓冲区实体;对所述线性缓冲区实体执行的前(m+1)次取出操作中的每一次均应得到一个依赖于所述原子状态机的原子状态机向后转移器实体。
原子状态向后转移器逻辑接口(Atomic State Backward Transfer Interface)包含向后转移(Backward Transfer)的语义。一个原子状态向后转移器实体对应一个状态映射数值为n的原子状态机实体,若n大于零,则其向后转移语义的执行应成功,其作用包含原子地将所述原子状态机实体状态转移至数值(n-1)所映射的状态;否则,即n等于零,则其向后转移语义执行应失败。
树形原子状态机结构可被应用于并发调用方法。一个树形原子状态机初始化器实体具有原子状态机初始化器逻辑接口描述的语义需求。以n为输入(n为非负整数),其初始化语义的执行将输出一个线性缓冲区实体,同时初始化一个树形原子状态机实体。对所述线性缓冲区实体执行的前(n+1)次取出操作均得到树形原子状态转移器实体。一个树形原子状态转移器实体维护一个树形原子状态机节点引用,具有原子状态向后转移器逻辑接口描述的语义。优选的,一个树形原子状态转移器实体同时具有原子状态向前转移器逻辑接口描述的语义。
树形原子状态机的初始状态未定义,在极限情况下,可以是平衡多叉树,也可以是退化为链的树。当一个树形原子状态机的初始状态为退化为链的树,并且每个维护的节点实体引用有效的节点实体对应其父节点的权值均为1的情况下,每个节点至多有一个子节点,整棵树只存在一个叶子节点;除叶子节点外,每个节点的初始计数均为最大计数,其结构如图3所示。
一个树形原子状态机节点维护了一个当前节点计数和其父节点的引用。其中,当前节点计数是一个支持原子操作的无符号整数,可以记作c;其父节点引用可以记作p。每个树形原子状态转移器维护一个树形原子状态机节点引用,可以记作node。
在上述的具体实施例二中,提供了一种树形原子状态机控制逻辑接口的实现方法,与之相对应的,本申请还提供一种树形原子状态机控制逻辑接口的实现装置。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
具体实施例三
如图4所示,本发明实施例提供了一种具体实施例一中任一项树形原子状态机控制逻辑接口的实现装置,其特征在于,包括:
语义需求文档获取模块201,用于:
接收用户对编程语言的选择指令,确定编程语言;
查询与编程语言相应的语义需求文档,所述语义需求文档包括逻辑接口和与逻辑接口相应的语义需求;所述逻辑接口包括线性缓冲区逻辑接口、树形原子状态机初始化器逻辑接口、树形原子状态转移器逻辑接口中的一种或多种;
代码获取模块202,用于:
获取数据结构;所述数据结构包括可堆叠线性缓冲区数据结构和树形原子状态机节点数据结构;
获取树形原子状态机过程;所述树形原子状态机过程包括可堆叠线性缓冲区-取出过程、可堆叠线性缓冲区-加入过程、树形原子状态机-节点-初始化过程、树形原子状态机-初始化器-初始化过程、树形原子状态机-转移器-增加过程、树形原子状态机-转移器-条件减少过程;
查询数据结构的代码;
根据数据结构的代码,获取可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码;
根据语义需求文档,利用可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码,获取与逻辑接口相应的树形原子状态机初始化器的代码、树形原子状态转移器的代码;
调用模块203,用于:
确定调用代码的类型;所述调用代码的类型包括树形原子状态机初始化器的代码和树形原子状态转移器的代码;
当调用代码的类型为树形原子状态机初始化器的代码时,调用树形原子状态机初始化器的代码,以实现用户需求;
当调用代码的类型为树形原子状态转移器的代码时,调用树形原子状态转移器的代码,以实现用户需求。
本发明实施例所提供的树形原子状态机控制逻辑接口的实现装置,对PhaserAccumulator的分治思想进行了改进,在并发调用方法不需要原子状态机实时的精确状态时,只需要判断每一次的向后转移操作是否成功即可,所以无需引入Phaser Accumulator的读取复杂度。从而在控制对于原子状态机实体的局部读写的并发上限的同时降低修改操作的复杂度,从而提高修改效率。
具体实施例四
在具体实施例二的基础上,本发明实施例提供了一种可堆叠线性缓冲区-取出过程,包括:
0.输入可堆叠线性缓冲区(用buffer表示);
1.保存buffer的栈顶元素的e域为res;
2.将buffer的栈顶元素的cnt域–1;
3.若buffer的栈顶元素的cnt域为零,则将buffer的栈顶元素弹出;
4.返回res。
此时res为E类型的一个实体。
具体实施例五
在具体实施例二的基础上,本发明实施例提供了一种可堆叠线性缓冲区-加入过程,包括:
0.输入可堆叠线性缓冲区(用buffer表示),要加入的E类型元素x和加入的个数num;
1.创建一个x与num的聚合体pair,类型为Pair;
2.将pair的e域置为x;
3.将pair的cnt域置为num;
4.将pair加至buffer的栈顶。
具体实施例六
在具体实施例二的基础上,本发明实施例提供了一种树形原子状态机-节点-初始化过程,包括:
0.输入树形原子状态机节点父节点引用(用parent表示),树形原子状态转移器的线性缓冲区实体引用(用buffer表示)和初始计数(用initial_count表示);
1.创建树形原子状态机节点实体(用node表示);
2.将node的p域设为parent;
3.若initial_count小于等于MAX_COUNT则:
a)以initial_count为参数,对node的c域执行无同步操作的原子整数初始化操作;
b)向buffer内加入(initial_count+1)个以当前节点构建的树形原子状态转移器实体;
c)返回;
4.以MAX_COUNT为参数,对node的c域执行无同步操作的原子整数初始化操作;
5.向线性缓冲区内加入MAX_COUNT个以当前节点构建的树形原子状态转移器;
6.递归地以当node为父节点,buffer为线性缓冲区,(initial_count–MAX_COUNT)为初始计数执行树形原子状态机节点-初始化算法。
具体实施例七
在具体实施例二的基础上,本发明实施例提供了一种树形原子状态机-初始化过程,包括:
0.输入初始计数(用initial_count表示);
1.创建空的树形原子状态机线性缓冲区实体(用buffer表示);
2.以无效引用为父节点,buffer和initial_count为参数执行树形原子状态机节点-初始化算法;
3.返回buffer。
具体实施例八
在具体实施例二的基础上,本发明实施例提供了一种树形原子状态机-增加过程,包括:
0.输入树形原子状态转移器实体(用m表示)和增加计数(用i表示);
1.创建空的原子状态转移器的线性缓冲区实体(用buffer表示);
2.创建临时整数变量increased;
3.对m的c域执行无同步操作的Load Linked原语,将c的当前值保存为临时变量current;
4.若current等于MAX_COUNT则:
a)以m的node域为父节点,buffer和i为参数执行树形原子状态机节点-初始化算法;
b)返回buffer;
5.将i和(MAX_COUNT-current)中较小的一个赋值给increased;
6.将current作为期望值,(current+increased)作为修改后的值,对m的node域的c域执行无同步操作的Compare and Swap原语。若失败则跳转至4;
7.若i与increased不相等则:
a)向buffer内加入increased个以m的node域构建的树形原子状态转移器实体;
b)以m的node域为父节点、buffer和(i-increased)为参数执行树形原子状态机节点-初始化算法;
c)返回buffer;
8.向线性缓冲区实体内加入(increased+1)个以输入节点构建的树形原子状态转移器实体;
9.返回buffer。
具体实施例九
在具体实施例二的基础上,本发明实施例提供了一种树形原子状态机-条件减少过程,包括:
0.输入树形原子状态转移器(用m表示);
1.执行具有release语义的,不与内存区域关联的同步操作;
2.对m的node域的c域执行无同步操作的Load Linked原语,将c的当前值保存为临时整数变量current;
3.如果current不等于零则:
a)将current作为期望值,(current-1)作为修改后的值,对m的node域的c域执行无同步操作的Compare and Swap原语。若失败则重复执行当前操作;
b)如果current不等于0则返回真值;
4.保存m的node域的p域为临时变量parent;
5.销毁m的node域(可选);
6.如果parent为有效引用则:
a)执行具有acquire语义的,不与内存区域关联的同步操作;
b)返回假值;
7.将m的node域赋值为parent;
8.跳转至2。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。尽管本发明已进行了一定程度的描述,明显地,在不脱离本发明的精神和范围的条件下,可进行各个条件的适当变化。可以理解,本发明不限于所述实施方案,而归于权利要求的范围,其包括所述每个因素的等同替换。
Claims (2)
1.一种树形原子状态机控制逻辑接口的实现方法,每个树形原子状态机实体包括若干个节点实体,每个节点实体维护一个原子状态机实体和一个节点实体的引用;所述原子状态机实体存在n种状态可以一一映射到小于n的全部非负整数,n为正整数;所述节点实体的引用用于提供节点实体的寻址方式;其特征在于,包括:
语义需求文档获取步骤:
接收用户对编程语言的选择指令,确定编程语言;
查询与编程语言相应的语义需求文档,所述语义需求文档包括逻辑接口和与逻辑接口相应的语义需求;所述逻辑接口包括线性缓冲区逻辑接口、树形原子状态机初始化器逻辑接口、树形原子状态转移器逻辑接口中的一种或多种;
代码获取步骤:
获取数据结构;所述数据结构包括可堆叠线性缓冲区数据结构和树形原子状态机节点数据结构;
获取树形原子状态机过程;所述树形原子状态机过程包括可堆叠线性缓冲区-取出过程、可堆叠线性缓冲区-加入过程、树形原子状态机-节点-初始化过程、树形原子状态机-初始化器-初始化过程、树形原子状态机-转移器-增加过程、树形原子状态机-转移器-条件减少过程;
查询数据结构的代码;
根据数据结构的代码,获取可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码;
根据语义需求文档,利用可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码,获取与逻辑接口相应的树形原子状态机初始化器的代码、树形原子状态转移器的代码;
调用步骤:
确定调用代码的类型;所述调用代码的类型包括树形原子状态机初始化器的代码和树形原子状态转移器的代码;
当调用代码的类型为树形原子状态机初始化器的代码时,调用树形原子状态机初始化器的代码,以实现用户需求;
当调用代码的类型为树形原子状态转移器的代码时,调用树形原子状态转移器的代码,以实现用户需求。
2.一种树形原子状态机控制逻辑接口的实现装置,每个树形原子状态机实体包括若干个节点实体,每个节点实体维护一个原子状态机实体和一个节点实体的引用;所述原子状态机实体存在n种状态可以一一映射到小于n的全部非负整数,n为正整数;所述节点实体的引用用于提供节点实体的寻址方式;其特征在于,包括:
语义需求文档获取模块,用于:
接收用户对编程语言的选择指令,确定编程语言;
查询与编程语言相应的语义需求文档,所述语义需求文档包括逻辑接口和与逻辑接口相应的语义需求;所述逻辑接口包括线性缓冲区逻辑接口、树形原子状态机初始化器逻辑接口、树形原子状态转移器逻辑接口中的一种或多种;
代码获取模块,用于:
获取数据结构;所述数据结构包括可堆叠线性缓冲区数据结构和树形原子状态机节点数据结构;
获取树形原子状态机过程;所述树形原子状态机过程包括可堆叠线性缓冲区-取出过程、可堆叠线性缓冲区-加入过程、树形原子状态机-节点-初始化过程、树形原子状态机-初始化器-初始化过程、树形原子状态机-转移器-增加过程、树形原子状态机-转移器-条件减少过程;
查询数据结构的代码;
根据数据结构的代码,获取可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码;
根据语义需求文档,利用可堆叠线性缓冲区-取出过程的代码、可堆叠线性缓冲区-加入过程的代码、树形原子状态机-节点-初始化过程的代码、树形原子状态机-初始化器-初始化过程的代码、树形原子状态机-转移器-增加过程的代码、树形原子状态机-转移器-条件减少过程的代码,获取与逻辑接口相应的树形原子状态机初始化器的代码、树形原子状态转移器的代码;
调用模块,用于:
确定调用代码的类型;所述调用代码的类型包括树形原子状态机初始化器的代码和树形原子状态转移器的代码;
当调用代码的类型为树形原子状态机初始化器的代码时,调用树形原子状态机初始化器的代码,以实现用户需求;
当调用代码的类型为树形原子状态转移器的代码时,调用树形原子状态转移器的代码,以实现用户需求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710129216.1A CN106990994B (zh) | 2017-03-06 | 2017-03-06 | 树形原子状态机及其控制逻辑接口的实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710129216.1A CN106990994B (zh) | 2017-03-06 | 2017-03-06 | 树形原子状态机及其控制逻辑接口的实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106990994A CN106990994A (zh) | 2017-07-28 |
CN106990994B true CN106990994B (zh) | 2020-11-27 |
Family
ID=59412652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710129216.1A Expired - Fee Related CN106990994B (zh) | 2017-03-06 | 2017-03-06 | 树形原子状态机及其控制逻辑接口的实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106990994B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106990994B (zh) * | 2017-03-06 | 2020-11-27 | 王铭鑫 | 树形原子状态机及其控制逻辑接口的实现方法及装置 |
CN111176772B (zh) * | 2019-12-24 | 2022-07-01 | 安克创新科技股份有限公司 | 用于状态切换的方法、装置以及机器人 |
CN111930474B (zh) * | 2020-07-30 | 2023-11-17 | 杭州当虹科技股份有限公司 | 一种基于java原子操作的单服务接口的并发限制方法 |
CN113079172B (zh) * | 2021-04-13 | 2022-08-16 | 宁波和利时信息安全研究院有限公司 | 一种审计策略的匹配方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101771670A (zh) * | 2008-12-30 | 2010-07-07 | 北京天融信网络安全技术有限公司 | 多核下子连接并发识别与处理的方法 |
US8352775B1 (en) * | 2008-02-08 | 2013-01-08 | Joviandata, Inc. | State machine controlled dynamic distributed computing |
CN104583935A (zh) * | 2012-08-31 | 2015-04-29 | 美光科技公司 | 状态机引擎中的指令插入 |
CN106227584A (zh) * | 2016-07-28 | 2016-12-14 | 武汉聚风天下科技有限公司 | 一种基于状态机的事件驱动方法和系统 |
CN106990994A (zh) * | 2017-03-06 | 2017-07-28 | 王铭鑫 | 树形原子状态机及其控制逻辑接口的实现方法及装置 |
-
2017
- 2017-03-06 CN CN201710129216.1A patent/CN106990994B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8352775B1 (en) * | 2008-02-08 | 2013-01-08 | Joviandata, Inc. | State machine controlled dynamic distributed computing |
CN101771670A (zh) * | 2008-12-30 | 2010-07-07 | 北京天融信网络安全技术有限公司 | 多核下子连接并发识别与处理的方法 |
CN104583935A (zh) * | 2012-08-31 | 2015-04-29 | 美光科技公司 | 状态机引擎中的指令插入 |
CN106227584A (zh) * | 2016-07-28 | 2016-12-14 | 武汉聚风天下科技有限公司 | 一种基于状态机的事件驱动方法和系统 |
CN106990994A (zh) * | 2017-03-06 | 2017-07-28 | 王铭鑫 | 树形原子状态机及其控制逻辑接口的实现方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106990994A (zh) | 2017-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106990994B (zh) | 树形原子状态机及其控制逻辑接口的实现方法及装置 | |
TWI660274B (zh) | 基於區塊鏈的資料處理方法及設備 | |
US9298437B2 (en) | Unrolling quantifications to control in-degree and/or out-degree of automaton | |
WO2018177250A1 (zh) | 一种基于区块链的数据处理方法及设备 | |
US7503039B2 (en) | Preprocessor to improve the performance of message-passing-based parallel programs on virtualized multi-core processors | |
US7861222B2 (en) | Discoscript: a simplified distributed computing scripting language | |
CA2895848C (en) | Parallel priority queue utilizing parallel heap on many-core processors for accelerating priority-queue-based applications | |
US20190065199A1 (en) | Saving and restoring non-contiguous blocks of preserved registers | |
US8606791B2 (en) | Concurrently accessed hash table | |
JP2011527788A5 (zh) | ||
TW200825800A (en) | Dynamic fragment mapping | |
US20090006450A1 (en) | Memory efficient data processing | |
WO2009097679A1 (en) | A multi-reader, multi-writer lock-free ring buffer | |
CN109669772A (zh) | 计算图的并行执行方法和设备 | |
AU2013361244A1 (en) | Paraller priority queue utilizing parallel heap on many-core processors for accelerating priority-queue-based applications | |
US20170068700A1 (en) | System And Method Of A Dynamic Shared Memory Hash Table With Notifications | |
CN101350007B (zh) | 具有低争用和负担均衡的并行xsl转换的方法和装置 | |
US9252804B2 (en) | Re-aligning a compressed data array | |
WO2017053207A1 (en) | Searching a data structure | |
CN104699460A (zh) | 线程偏差计数器 | |
CN115004150A (zh) | 用于预测和调度软件流水化循环中的复制指令的方法和装置 | |
Domkin et al. | Linked Lists | |
Welch et al. | Extending OpenSHMEM with Aggregation Support for Improved Message Rate Performance | |
US11954093B2 (en) | Performing a top-k function using a binary heap tree | |
CN114201253B (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20201127 |