掌桥专利:专业的专利平台
掌桥专利
首页

一种组合事件触发方法及触发系统

文献发布时间:2023-06-19 10:29:05


一种组合事件触发方法及触发系统

技术领域

本发明涉及多线程编程技术领域,具体涉及一种组合事件触发方法及触发系统。

背景技术

组合事件即事件集合中若干事件的组合,如事件集合为{事件A,事件B,事件C},则组合事件的集合为{[],[事件A],[事件B],[事件C],[事件A,事件B],[事件A,事件C],[事件B,事件C],[事件A,事件B,事件C]}。

组合事件触发即当组合事件为组合1时,执行组合1对应的处理逻辑;组合事件为组合2时,执行组合2对应的处理逻辑。

在对5G_PROXY进行性能测试时发现在异步路由流程下存在丢包现象,经分析原因为多线程场景下组合事件触发错误;即,在异步流程下,消息池的清理未在满足目标组合事件之前便发生,导致消息池被清理,消息丢失。

发明内容

针对现有技术中存在的上述问题,本发明提供一种组合事件触发方法及触发系统,在多线程场景下,实现精确的、线程安全的组合事件触发。

本发明公开了一种组合事件触发方法,包括:

确定m个事件以及由m个事件构成的触发组合事件集合;

将包含m个事件的事件集合用m位无符号整数表示;

初始化事件集合;其中,初始化后各事件的整数为a,该事件发生后对应的整数为b,a≠b;

当事件n发生时,事件n对应的整数由a赋值b;其中,事件n属于事件集合;

判断包含事件n的触发组合事件是否达到触发条件;

若达到,则触发执行该组合事件对应的处理逻辑。

作为本发明的进一步改进,若包含事件n的触发组合事件未达到触发条件,则等待其他事件发生后,在已发生事件被赋值的基础上,再次判断包含新事件的触发组合事件是否达到触发条件。

作为本发明的进一步改进,m位无符号整数由二进制表示,初始化后各事件的整数为0,该事件发生后对应的整数为1。

作为本发明的进一步改进,若m=16,则初始化事件集合为(0000 000000000000);若事件2发生,则事件集合为(0000 0000 0000 0100)。

作为本发明的进一步改进,具体包括:

确定3个事件A、B、C以及由3个事件构成的触发组合事件集合{[事件A,事件B],[事件A,事件C]};

将包含3个事件的事件集合用3位无符号整数表示,并初始化事件集合为(000);

若事件A发生,则事件集合为(001);此时,组合事件[事件A,事件B]、[事件A,事件C]未达到触发条件;

在事件A发生的基础上,若事件B发生,则事件集合为(011);此时,组合事件[事件A,事件B]达到触发条件,则触发执行[事件A,事件B]对应的处理逻辑;

在事件A、B发生的基础上,若事件C发生,则事件集合为(111);此时,组合事件[事件A,事件C]达到触发条件,则触发执行[事件A,事件C]对应的处理逻辑。

本发明还公开了一种组合事件触发系统,包括:

事件组合模块,用于确定m个事件以及由m个事件构成的触发组合事件集合;

初始化模块,用于将包含m个事件的事件集合用m位无符号整数表示,并初始化事件集合;其中,初始化后各事件的整数为a,该事件发生后对应的整数为b,a≠b;

处理模块,用于当事件n发生时,事件n对应的整数由a赋值b;其中,事件n属于事件集合;

判断模块,判断包含事件n的触发组合事件是否达到触发条件;

执行模块,用于当包含事件n的触发组合事件达到触发条件时,、触发执行该组合事件对应的处理逻辑。

作为本发明的进一步改进,所述执行模块,还用于当包含事件n的触发组合事件未达到触发条件时,则等待其他事件发生后,在已发生事件被赋值的基础上,再次判断包含新事件的触发组合事件是否达到触发条件。

作为本发明的进一步改进,m位无符号整数由二进制表示,初始化后各事件的整数为0,该事件发生后对应的整数为1。

作为本发明的进一步改进,若m=16,则初始化事件集合为(0000 0000 00000000);若事件2发生,则事件集合为(0000 0000 0000 0100)。

作为本发明的进一步改进,具体包括:

事件组合模块,用于确定3个事件A、B、C以及由3个事件构成的触发组合事件集合{[事件A,事件B],[事件A,事件C]};

初始化模块,用于将包含3个事件的事件集合用3位无符号整数表示,并初始化事件集合为(000);

处理模块,用于当事件A发生,则事件集合为(001);在事件A发生的基础上,若事件B发生,则事件集合为(011);在事件A、B发生的基础上,若事件C发生,则事件集合为(111);

判断模块,判断包含事件A、B、C的触发组合事件是否达到触发条件;其中,若仅事件A发生,则组合事件[事件A,事件B]、[事件A,事件C]未达到触发条件;若事件A、B发生,则组合事件[事件A,事件B]达到触发条件、[事件A,事件C]未达到触发条件;若事件A、B、C发生,则组合事件[事件A,事件B]、[事件A,事件C]均达到触发条件;

执行模块,用于在组合事件[事件A,事件B]达到触发条件,则触发执行[事件A,事件B]对应的处理逻辑;在组合事件[事件A,事件C]达到触发条件,则触发执行[事件A,事件C]对应的处理逻辑。

与现有技术相比,本发明的有益效果在于:

本发明在多线程场景下,实现精确的、线程安全的组合事件触发;解决了5G_PROXY异步路由流程下的丢包问题;可应用于DCC_PROXY的异步路由,同时,也可应用于其他多线程场景下的组合事件的触发。

附图说明

图1为本发明一种实施例公开的组合事件触发方法的流程图;

图2为本发明一种实施例公开的组合事件触发系统的框架图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明提供一种组合事件触发方法,包括:

步骤1、确定m个事件以及由m个事件构成的触发组合事件集合;

例如:

在对5G_PROXY进行性能测试时,确定其共有16个事件,则事件集合为{事件0,事件1,···,事件15},组合事件集合包括{[],[事件0],[事件1],[事件2],···,[事件15],[事件0,事件1],[事件0,事件2],[事件1,事件2],···,[事件0,事件1,···,事件15]};在上述组合事件集合,其包括触发组合事件和非触发组合事件,例如在对5G_PROXY进行性能测试时,确定其触发组合事件集合可包括{[事件0,事件1],[事件0,事件2],[事件1,事件2]}等。

步骤2、在步骤1确定事件以及触发组合事件集合后,可将包含m个事件的事件集合用m位无符号整数表示,并初始化事件集合;

其中,

初始化后各事件的整数为a,该事件发生后对应的整数为b,a≠b;

优选m位无符号整数由二进制表示,初始化后各事件的整数为0,该事件发生后其对应的整数赋值为1;例如,当m=16,则初始化事件集合为(0000 0000 0000 0000)。

步骤3、当事件n发生时,事件n对应的整数由a赋值b;其中,事件n属于事件集合;

例如,若事件2发生,则事件集合为(0000 0000 0000 0100);本发明在事件n发生时,采用位操作进行赋值,赋值时用CAS原子操作,以保证高效率(比互斥锁效率高)的线程安全。

步骤4、判断包含事件n的触发组合事件是否达到触发条件;

其中,本发明在每个事件发生后,对包含该事件的组合事件进行一次判断;

步骤5、若达到,则触发执行该组合事件对应的处理逻辑;

步骤6,若未达到,则等待其他事件发生后,在已发生事件被赋值的基础上,再次判断包含新事件的触发组合事件是否达到触发条件。

可实现上述步骤1~6的代码如下:

if(event 2happen)

__sync_fetch_and_add(&(event_set),1<<2);

if(event_set==0000 0000 0000 1100)

do something when event 2 and event 3 happen…

if(event_set==0000 0000 0000 0110)

do something when event 1 and event 2 happen…

注:事件n按从右往左的顺序从0开始计算。

本发明以3个事件A、B、C为例,对本发明的触发方法做如下说明:

S1、确定3个事件A、B、C以及由3个事件构成的组合事件集合,在组合事件集合中确定其触发组合事件集合为{[事件A,事件B],[事件A,事件C]};

S2、将包含3个事件的事件集合用3位无符号整数表示,并初始化事件集合为(000);

S3、当任一事件发生后,其对应的无符号整数由0赋值为1;

S4、若事件A发生,则事件集合为(001);此时,两个组合事件[事件A,事件B]、[事件A,事件C]均未达到触发条件;

S5、在事件A发生的基础上,若事件B发生,则事件集合为(011);此时,组合事件[事件A,事件B]达到触发条件,则触发执行[事件A,事件B]对应的处理逻辑;

S6、在事件A、B发生的基础上,若事件C发生,则事件集合为(111);此时,组合事件[事件A,事件C]达到触发条件,则触发执行[事件A,事件C]对应的处理逻辑。

进一步,在上述步骤中,事件A、B、C可同时发生,也可分开发生;任一触发组合事件达到触发条件后,则可进行触发。

如图2所示,本发明还提供一种组合事件触发系统,包括:

事件组合模块,用于实现上述步骤1;

初始化模块,用于实现上述步骤2;

处理模块,用于实现上述步骤3;

判断模块,判断实现上述步骤4;

执行模块,用于实现上述步骤5、6。

本发明以3个事件A、B、C为例,对本发明的触发系统做如下说明:

事件组合模块,用于确定3个事件A、B、C以及由3个事件构成的触发组合事件集合{[事件A,事件B],[事件A,事件C]};

初始化模块,用于将包含3个事件的事件集合用3位无符号整数表示,并初始化事件集合为(000);

处理模块,用于当事件A发生,则事件集合为(001);在事件A发生的基础上,若事件B发生,则事件集合为(011);在事件A、B发生的基础上,若事件C发生,则事件集合为(111);

判断模块,判断包含事件A、B、C的触发组合事件是否达到触发条件;其中,若仅事件A发生,则组合事件[事件A,事件B]、[事件A,事件C]未达到触发条件;若事件A、B发生,则组合事件[事件A,事件B]达到触发条件、[事件A,事件C]未达到触发条件;若事件A、B、C发生,则组合事件[事件A,事件B]、[事件A,事件C]均达到触发条件;

执行模块,用于在组合事件[事件A,事件B]达到触发条件,则触发执行[事件A,事件B]对应的处理逻辑;在组合事件[事件A,事件C]达到触发条件,则触发执行[事件A,事件C]对应的处理逻辑。

实施例:

假设有一趟从北京到天津的大巴,发车条件为大巴加满油和大巴坐满乘客,目前只差一个乘客即可坐满,有事件集合{[大巴加满油],[小红作为最后一名乘客坐上大巴],[小绿作为最后一名乘客坐上大巴]},分别为事件0,事件1和事件2。当事件0,1或事件0,2同时发生时,则达到触发条件,触发大巴发车。即当事件0、1、2任一满足时,都检查是否达成触发条件,若达成则大巴发生,反之等待其他事件的发生。

进一步,还可包括事件3:[乘客需在8:00前上车],则当事件0,1,3或事件0,2,3同时发生时,则达到触发条件,触发大巴发车。即当事件0、1、2、3任一满足时,都检查是否达成触发条件,若达成则大巴发生,反之等待其他事件的发生。

本发明的优点为:

本发明在多线程场景下,实现精确的、线程安全的组合事件触发;解决了5G_PROXY异步路由流程下的丢包问题;可应用于DCC_PROXY的异步路由,同时,也可应用于其他多线程场景下的组合事件的触发。

以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种组合事件触发方法及触发系统
  • 基于事件触发动态触发机制的电力系统控制方法
技术分类

06120112568725