无锁消息队列通信方法及系统与流程

文档序号:12363223阅读:515来源:国知局
无锁消息队列通信方法及系统与流程

本发明涉及通信技术领域,尤其涉及一种无锁消息队列通信方法及系统。



背景技术:

现有进程间通信常用方式包括管道、有名管道、信号量、消息队列、信号、共享内存、套接字。其中,管道是一种半双工的通信方式,数据只能单向流动,而且只能在父子进程间使用。有名管道是半双工的通信方式,有名管道允许无亲缘关系进程间的通信。信号量是一个计数器,用来控制多个进程对共享资源的访问;信号量作为一种锁机制,用于防止某进程正在访问共享资源时,其他进程也访问该资源。信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。共享内存是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问;共享内存是最快的IPC方式,是针对其他进程间通信方式运行效率低而专门设计的;共享内存往往与其他通信机制配合使用,以实现进程间的同步和通信。套接字是一种进程间通信机制,可用于不同进程间的进程通信,是网络层面的底层通信机制。管道与有名管道仅限于父子进程间的通信;信号与信号量不适用于进程间大量数据交互的应用场景;套接字是网络层的通信机制,通信效率有所损失;消息队列与共享内存均存在多进程并发读写时的进程安全问题。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的缺陷,提供一种基于共享内存的无锁消息队列通信方法及系统,用于解决现有多个进程间进行大量数据交互所存在的并发安全问题。

本发明解决其技术问题所采用的技术方案是:一种无锁消息队列通信方法,包括:

在共享内存中创建无锁消息队列,所述无锁消息队列包括依据先进先出原则排列的至少一个消息体;

接收至少一个写进程发送的投递消息,并依据接收到投递消息的先后顺序,将每一所述写进程的投递消息对应的消息体依序写入所述无锁消息队列的队列尾部;

接收至少一个读进程发送的读取消息,并依据接收到读取消息的先后顺序,从所述无锁消息队列的队列头部依序将消息体逐一发送给每一所述读进程。

优选地,所述无锁消息队列包括用于存储头部信息的队列头部内存块、用于存储消息索引的消息索引内存块和用于存储消息内容的消息内容内存块;

所述接收至少一个写进程发送的投递消息,并依据接收到投递消息的先后顺序,将每一所述写进程的投递消息对应的消息体依序写入所述无锁消息队列的队列尾部,包括:

至少一个写进程先后获取队列写权限和抢占消息索引写权限,并向所述无锁消息队列发送投递消息;

根据每一写进程的抢占消息索引写权限确定接收到的投递消息的先后顺序;

将每一所述写进程的投递消息对应的消息体依序写入所述无锁消息队列的队列尾部的所述消息内容内存块中;

更新所述消息索引内存块中的消息索引,并释放所述抢占消息索引写权限;

更新所述队列头部内存块中的头部信息,并释放所述队列写权限。

优选地,所述接收至少一个读进程发送的读取消息,并依据接收到读取消息的先后顺序,从所述无锁消息队列的队列头部依序将消息体逐一发送给每一所述读进程,包括:

至少一个读进程获取队列读权限,并向所述无锁消息队列发送读取消息;

基于所述队列读权限,遍历所述消息索引内存块中的所有消息索引,以获取未读取的消息内容;

每一读进程获取抢占消息索引读权限,并根据抢占消息索引读权限确定接收到的读取消息的先后顺序;

从所述无锁消息队列的队列头部依序将所述未读取的消息内容逐一发送给到抢占消息索引读权限所对应的读进程中;

更新所述消息索引内存块中的消息索引,并释放所述抢占消息索引读权限;

更新所述队列头部内存块中的头部信息,并释放所述队列读权限。

优选地,所述写进程采用原子函数获取队列写权限;所述读进程采用原子函数获取所述队列读权限。

优选地,所述将每一所述写进程的投递消息对应的消息体依序写入所述无锁消息队列的队列尾部,还包括:向所有读进程发布消息入队列通知;

所述从所述无锁消息队列的队列头部依序将消息体逐一发送给每一所述读进程,还包括:向所有写进程发送消息出队列通知。

本发明还提供一种无锁消息队列通信系统,包括:

无锁消息队列创建模块,用于在共享内存中创建无锁消息队列,所述无锁消息队列包括依据先进先出原则排列的至少一个消息体;

写进程通信模块,用于接收至少一个写进程发送的投递消息,并依据接收到投递消息的先后顺序,将每一所述写进程的投递消息对应的消息体依序写入所述无锁消息队列的队列尾部;

读进程通信模块,用于接收至少一个读进程发送的读取消息,并依据接收到读取消息的先后顺序,从所述无锁消息队列的队列头部依序将消息体逐一发送给每一所述读进程。

优选地,所述无锁消息队列包括用于存储头部信息的队列头部内存块、用于存储消息索引的消息索引内存块和用于存储消息内容的消息内容内存块;

所述写进程通信模块包括:

写权限获取子模块,用于使至少一个写进程先后获取队列写权限和抢占消息索引写权限,并向所述无锁消息队列发送投递消息;

写进程先后顺序确定子模块,用于根据每一写进程的抢占消息索引写权限确定接收到的投递消息的先后顺序;

消息体写入子模块,用于将每一所述写进程的投递消息对应的消息体依序写入所述无锁消息队列的队列尾部的所述消息内容内存块中;

消息索引写权限释放模块,用于更新所述消息索引内存块中的消息索引,并释放所述抢占消息索引写权限;

队列写权限释放模块,用于更新所述队列头部内存块中的头部信息,并释放所述队列写权限。

优选地,所述读进程通信模块包括:

队列读权限获取子模块,用于使至少一个读进程获取队列读权限,并向所述无锁消息队列发送读取消息;

消息内容获取子模块,用于基于所述队列读权限,遍历所述消息索引内存块中的所有消息索引,以获取未读取的消息内容;

读进程先后顺序确定子模块,用于使每一读进程获取抢占消息索引读权限,并根据抢占消息索引读权限确定接收到的读取消息的先后顺序;

消息体读取子模块,用于从所述无锁消息队列的队列头部依序将所述未读取的消息内容逐一发送给到抢占消息索引读权限所对应的读进程中;

消息索引读权限释放子模块,用于更新所述消息索引内存块中的消息索引,并释放所述抢占消息索引读权限;

队列读权限释放子模块,用于更新所述队列头部内存块中的头部信息,并释放所述队列读权限。

优选地,所述写进程采用原子函数获取队列写权限;所述读进程采用原子函数获取所述队列读权限。

优选地,所述写进程通信模块还包括消息入队列通知发布子模块,用于向所有读进程发布消息入队列通知;

所述读进程通信模块还包括消息出队列通知发布子模块,用于向所有写进程发送消息出队列通知。

本发明与现有技术相比具有如下优点:本发明所提供的无锁消息队列通信方法中,通过在共享内存中创建无锁消息队列,使其可接收至少一个写进程发送的投递消息,完成消息体的写入;并可接收至少一个读进程发送的读取消息,完成消息体的读取。该无锁消息队列通信方法中所有消息体依据先进先出原则存储在共享内存中,通过写进程和读进程可实现同一设备中多个进程间进行大量数据交互的并发安全通信。

本发明所提供的无锁消息队列通信系统中,通过无锁消息队列创建模块在共享内存中创建无锁消息队列;并通过写进程通信模块使无锁消息队列可接收至少一个写进程发送的投递消息,完成消息体的写入;并通过读进程通信模块使无锁消息队列可接收至少一个读进程发送的读取消息,完成消息体的读取。该无锁消息队列通信系统中所有消息体依据先进先出原则存储在共享内存中,通过写进程和读进程可实现同一设备中多个进程间进行大量数据交互的并发安全通信。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1是本发明实施例1中无锁消息队列通信方法的一示意图。

图2是本发明实施例1中无锁消息队列通信方法的一流程图。

图3是本发明实施例1中无锁消息队列通信方法的一局部流程图。

图4是本发明实施例1中无锁消息队列通信方法的另一局部流程图。

图5是本发明实施例2中无锁消息队列通信系统的一原理框图。

图6是本发明实施例2中写进程通信模块的一原理框图。

图7是本发明实施例2中读进程通信模块的一原理框图。

图中:1、无锁消息队列创建模块;2、写进程通信模块;21、写权限获取子模块;22、写进程先后顺序确定子模块;23、消息体写入子模块;24、消息索引写权限释放模块;25、队列写权限释放模块;26、消息入队列通知发布子模块;3、读进程通信模块;31、队列读权限获取子模块;32、消息内容获取子模块;33、读进程先后顺序确定子模块;34、消息体读取子模块;35、消息索引读权限释放子模块;36、队列读权限释放子模块;37、消息出队列通知发布子模块;4、无锁消息队列销毁模块。

具体实施方式

为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。

实施例1

图1和图2示出本实施例中的一种无锁消息队列通信方法。如图1和图2所示,该无锁消息队列通信方法包括:

S1:主进程在共享内存中创建无锁消息队列,无锁消息队列包括依据先进先出原则排列的至少一个消息体。具体地,主进程创建无锁消息队列类(CMsgQueueShm)实例,调用OPEN操作完成无锁消息队列的创建,并完成队列头部信息的初始化操作。本实施例中所有的消息体均存储在共享内存中,可通过对共享内存中的消息体的读写操作完成数据交互。具体地,无锁消息队列包括用于存储头部信息的队列头部内存块、用于存储消息索引的消息索引内存块和用于存储消息内容的消息内容内存块。

其中,队列头部内存块保留队列的基本信息,包括队列容量(即保存消息的最大数量)、当前使用数量(即写进程数量和读进程数量)、进队列消息数量、出队列消息数量、可写消息数量、可读消息数量、数据写位置(即消息内容区的写位置偏移)、数据读位置(即消息内容区的读位置偏移)。消息索引内存块保留每个消息的的索引信息,包括当前消息是否正在被使用(即正在被读进程所读取或者正常被写进程写入)、当前写进程数量、当前读进程数量、消息内容的长度、消息索引的编号、消息在消息内容区的起始位置。消息内容内存块是保留消息体的具体内容,由完整的一块大内存组成。

S2:接收至少一个写进程发送的投递消息,并依据接收到投递消息的先后顺序,将每一写进程的投递消息对应的消息体依序写入无锁消息队列的队列尾部。本实施例中,无锁消息队列可接收至少一个写进程发送的投递消息,完成至少一个写进程的并发操作,并且通过写进程写入无锁消息队列的消息体严格遵循先进先出原则,一个消息体只能被一个写进程写入无锁消息队列。如图3所示,步骤S2具体包括:

S21:至少一个写进程先后获取队列写权限和抢占消息索引写权限,并向无锁消息队列发送投递消息。其中,队列写权限是写进程可向无锁消息队列写入消息体的权限。抢占消息索引写权限是指写进程抢占共享内存中的消息索引的优先级的权限。本实施例中,写进程采用原子函数取代系统临界区锁函数获取队列写权限,在确保数据安全的同时,可减少系统调用,提高无锁消息队列的并发性能。

S22:根据每一写进程的抢占消息索引写权限确定接收到的投递消息的先后顺序。可以理解地,若两个写进程的投递消息不同时到达无锁消息队列,则可直接依据投递消息到达无锁消息队列的时间确定投递消息的先后顺序。在两个或两个以上投递消息同时到达无锁消息队列时,可根据抢占消息索引写权限的优先级确定接收到的投递消息的先后顺序。

S23:将每一写进程的投递消息对应的消息体依序写入无锁消息队列的队列尾部的消息内容内存块中。具体地,将每一写进程的投递消息对应的消息体依据步骤S22中确定的投递消息的先后顺序写入无锁消息队列的队列尾部的无锁消息队列中,完成消息写入(PUT)操作。步骤S23严格遵循先进先出原则将写进程的消息体写入无锁消息队列中,且一个消息体只能被一个写进程写入无锁消息队列中。可以理解地,每一写进程的投递消息对应的消息体的长度不定长,只要消息体的长度不大于消息内容内存块中的剩余内存长度即可。

S24:更新消息索引内存块中的消息索引,并释放抢占消息索引写权限。

S25:更新队列头部内存块中的头部信息,并释放队列写权限,写操作结束,使得写进程不可再向无锁消息队列发送投递消息和消息体,从而确保一写进程只能向无锁消息队列写入一消息体。

S26:向读进程发布消息入队列通知,以使所有读进程及时读取无锁消息队列中新入队的消息体,大大提升无锁消息队列的并发性能,减少消息体在无锁消息队列中保存的时间,极大地减少消息体进出队列的时间,实现无锁消息队列的高并发、低延时,非常适用于服务器应用多进程间的大量数据交互通信的场景。

S3:接收至少一个读进程发送的读取消息,并依据接收到读取消息的先后顺序,从无锁消息队列的队列头部依序将消息体逐一发送给每一读进程。本实施例中,无锁消息队列可接收至少一个读进程发送的读取消息,完成至少一个读进程读取消息体的并发操作,并且通过读进程读取的无锁消息队列中的消息体严格遵循先进先出原则,一个读进程只能从无锁消息队列中读取一个消息体,且无锁消息队列中的每一消息体只能被一种读进程读取。如图4所示,步骤S3具体包括:

S31:至少一个读进程获取队列读权限,并向无锁消息队列发送读取消息。其中,队列读权限是指读进程可向无锁消息队列发送的读取消息并接收无锁消息队列发送的消息体的权限。本实施例中,读进程采用原子函数取代系统临界区锁函数获取队列读权限,在确保数据安全的同时,可减少系统调用,提高无锁消息队列的并发性能。

S32:基于队列读权限,遍历消息索引内存块中的所有消息索引,以获取未读取的消息内容。具体地,无锁消息队列接收到每一读进程的读取消息,均需遍历消息索引内存块中的所有消息索引,以确定未读取的消息索引,从而确定与未读取的消息索引对应的未读取的消息内容。可以理解地,针对每一读进程的读取消息遍历消息索引内存块中的所有消息索引过程中,不获取已经读取的消息索引,从而保证无锁消息队列中已被读取的任一消息体不被另一读进程读取。

S33:每一读进程获取抢占消息索引读权限,并根据抢占消息索引读权限确定接收到的读取消息的先后顺序。其中,抢占消息索引读权限是指读进程抢占共享内存中的消息索引的优先级的权限。可以理解地,若两个读进程的读取消息不同时到达无锁消息队列,则可依据读取消息到达无锁消息队列的时间确定读取消息的先后顺序。在两个或两个以上读取消息同时到达无锁消息队列时,可根据每一读进程的抢占消息索引读权限的优先级确定接收到的读取消息的先后顺序。

S34:从无锁消息队列的队列头部依序将未读取的消息内容逐一发送给到抢占消息索引读权限所对应的读进程中。具体时,依步骤S33确定的读取消息的先后顺序,从无锁消息队列的队列头部将未读取的消息内容逐一发送给到抢占消息索引读权限所对应的读进程中,完成消息读取(GET)操作。该步骤严格遵循先进先出原则,且无锁消息队列中的任一个消息体只能被一个读进程读取。

S35:更新消息索引内存块中的消息索引,并释放抢占消息索引读权限。

S36:更新队列头部内存块中的头部信息,并释放队列读权限,读操作结束,使得读进程不可再向无锁消息队列发送读取消息,并接收无锁消息队列发送的未读取的消息内容(即未读取的消息体)。

S37:向所有写进程发布消息出队列通知,以使所有写进程及时向无锁消息队列写入新的消息体,大大提升无锁消息队列的并发性能,减少消息体在无锁消息队列中保存的时间,极大地减少消息体进出队列的时间,实现无锁消息队列的高并发、低延时,应用于服务器应用多进程间的大量数据交互通信的场景。

S4:主进程销毁共享内存中的无锁消息队列,使得队列头部内存块释放头部信息,消息索引内存块释放消息索引,消息内存块释放消息内容。

本实施例所提供的无锁消息队列通信方法中,通过在共享内存中创建无锁消息队列,使其可接收至少一个写进程发送的投递消息,完成消息体的写入;并可接收至少一个读进程发送的读取消息,完成消息体的读取。该无锁消息队列通信方法中所有消息体依据先进先出原则存储在共享内存中,通过写进程和读进程可实现同一设备中多个进程间进行大量数据交互的并发安全通信。

实施例2

图5示出本实施例中的一种无锁消息队列通信系统。如图5所示,该无锁消息队列通信系统包括无锁消息队列创建模块1、写进程通信模块2、读进程通信模块3和无锁消息队列销毁模块4。

无锁消息队列创建模块1,用于主进程在共享内存中创建无锁消息队列,无锁消息队列包括依据先进先出原则排列的至少一个消息体。具体地,主进程创建无锁消息队列类(CMsgQueueShm)实例,调用OPEN操作完成无锁消息队列的创建,并完成队列头部信息的初始化操作。本实施例中所有的消息体均存储在共享内存中,可通过对共享内存中的消息体的读写操作完成数据交互。具体地,无锁消息队列包括用于存储头部信息的队列头部内存块、用于存储消息索引的消息索引内存块和用于存储消息内容的消息内容内存块。

其中,队列头部内存块保留队列的基本信息,包括队列容量(即保存消息的最大数量)、当前使用数量(即写进程数量和读进程数量)、进队列消息数量、出队列消息数量、可写消息数量、可读消息数量、数据写位置(即消息内容区的写位置偏移)、数据读位置(即消息内容区的读位置偏移)。消息索引内存块保留每个消息的的索引信息,包括当前消息是否正在被使用(即正在被读进程所读取或者正常被写进程写入)、当前写进程数量、当前读进程数量、消息内容的长度、消息索引的编号、消息在消息内容区的起始位置。消息内容内存块是保留消息体的具体内容,由完整的一块大内存组成。

写进程通信模块2,用于接收至少一个写进程发送的投递消息,并依据接收到投递消息的先后顺序,将每一写进程的投递消息对应的消息体依序写入无锁消息队列的队列尾部。本实施例中,无锁消息队列可接收至少一个写进程发送的投递消息,完成至少一个写进程的并发操作,并且通过写进程写入无锁消息队列的消息体严格遵循先进先出原则,一个消息体只能被一个写进程写入无锁消息队列。如图6所示,写进程通信模块2具体包括:

写权限获取子模块21,用于使至少一个写进程先后获取队列写权限和抢占消息索引写权限,并向无锁消息队列发送投递消息。其中,队列写权限是写进程可向无锁消息队列写入消息体的权限。抢占消息索引写权限是指写进程抢占共享内存中的消息索引的优先级的权限。本实施例中,写进程采用原子函数取代系统临界区锁函数获取队列写权限,在确保数据安全的同时,可减少系统调用,提高无锁消息队列的并发性能。

写进程先后顺序确定子模块22,用于根据每一写进程的抢占消息索引写权限确定接收到的投递消息的先后顺序。可以理解地,若两个写进程的投递消息不同时到达无锁消息队列,则可直接依据投递消息到达无锁消息队列的时间确定投递消息的先后顺序。在两个或两个以上投递消息同时到达无锁消息队列时,可根据抢占消息索引写权限的优先级确定接收到的投递消息的先后顺序。

消息体写入子模块23,用于将每一写进程的投递消息对应的消息体依序写入无锁消息队列的队列尾部的消息内容内存块中。具体地,将每一写进程的投递消息对应的消息体依据写进程先后顺序确定子模块22中确定的投递消息的先后顺序写入无锁消息队列的队列尾部的无锁消息队列中,完成消息写入(PUT)操作。消息体写入子模块23严格遵循先进先出原则将写进程的消息体写入无锁消息队列中,且一个消息体只能被一个写进程写入无锁消息队列中。可以理解地,每一写进程的投递消息对应的消息体的长度不定长,只要消息体的长度不大于消息内容内存块中的剩余内存长度即可。

消息索引写权限释放模块24,用于更新消息索引内存块中的消息索引,并释放抢占消息索引写权限。

队列写权限释放模块25,用于更新队列头部内存块中的头部信息,并释放队列写权限,写操作结束,使得写进程不可再向无锁消息队列发送投递消息和消息体,从而确保一写进程只能向无锁消息队列写入一消息体。

消息入队列通知发布子模块26,用于向读进程发布消息入队列通知,以使所有读进程及时读取无锁消息队列中新入队的消息体,大大提升无锁消息队列的并发性能,减少消息体在无锁消息队列中保存的时间,极大地减少消息体进出队列的时间,实现无锁消息队列的高并发、低延时,非常适用于服务器应用多进程间的大量数据交互通信的场景。

读进程通信模块3,用于接收至少一个读进程发送的读取消息,并依据接收到读取消息的先后顺序,从无锁消息队列的队列头部依序将消息体逐一发送给每一读进程。本实施例中,无锁消息队列可接收至少一个读进程发送的读取消息,完成至少一个读进程读取消息体的并发操作,并且通过读进程读取的无锁消息队列中的消息体严格遵循先进先出原则,一个读进程只能从无锁消息队列中读取一个消息体,且无锁消息队列中的每一消息体只能被一种读进程读取。如图7所示,读进程通信模块3具体包括:

队列读权限获取子模块31,用于使至少一个读进程获取队列读权限,并向无锁消息队列发送读取消息。其中,队列读权限是指读进程可向无锁消息队列发送的读取消息并接收无锁消息队列发送的消息体的权限。本实施例中,读进程采用原子函数取代系统临界区锁函数获取队列读权限,在确保数据安全的同时,可减少系统调用,提高无锁消息队列的并发性能。

消息内容获取子模块32,用于基于队列读权限,遍历消息索引内存块中的所有消息索引,以获取未读取的消息内容。具体地,无锁消息队列接收到每一读进程的读取消息,均需遍历消息索引内存块中的所有消息索引,以确定未读取的消息索引,从而确定与未读取的消息索引对应的未读取的消息内容。可以理解地,针对每一读进程的读取消息遍历消息索引内存块中的所有消息索引过程中,不获取已经读取的消息索引,从而保证无锁消息队列中已被读取的任一消息体不被另一读进程读取。

读进程先后顺序确定子模块33,用于使每一读进程获取抢占消息索引读权限,并根据抢占消息索引读权限确定接收到的读取消息的先后顺序。其中,抢占消息索引读权限是指读进程抢占共享内存中的消息索引的优先级的权限。可以理解地,若两个读进程的读取消息不同时到达无锁消息队列,则可依据读取消息到达无锁消息队列的时间确定读取消息的先后顺序。在两个或两个以上读取消息同时到达无锁消息队列时,可根据每一读进程的抢占消息索引读权限的优先级确定接收到的读取消息的先后顺序。

消息体读取子模块34,用于从无锁消息队列的队列头部依序将未读取的消息内容逐一发送给到抢占消息索引读权限所对应的读进程中。具体时,依读进程先后顺序确定子模块33确定的读取消息的先后顺序,从无锁消息队列的队列头部将未读取的消息内容逐一发送给到抢占消息索引读权限所对应的读进程中,完成消息读取(GET)操作。该步骤严格遵循先进先出原则,且无锁消息队列中的任一个消息体只能被一个读进程读取。

消息索引读权限释放子模块35,用于更新消息索引内存块中的消息索引,并释放抢占消息索引读权限。

队列读权限释放子模块36,用于更新队列头部内存块中的头部信息,并释放队列读权限,读操作结束,使得读进程不可再向无锁消息队列发送读取消息,并接收无锁消息队列发送的未读取的消息内容(即未读取的消息体)。

消息出队列通知发布子模块37,用于向所有写进程发布消息出队列通知,以使所有写进程及时向无锁消息队列写入新的消息体,大大提升无锁消息队列的并发性能,减少消息体在无锁消息队列中保存的时间,极大地减少消息体进出队列的时间,实现无锁消息队列的高并发、低延时,应用于服务器应用多进程间的大量数据交互通信的场景。

无锁消息队列销毁模块4,用于使主进程销毁共享内存中的无锁消息队列,使得队列头部内存块释放头部信息,消息索引内存块释放消息索引,消息内存块释放消息内容。

本实施例所提供的无锁消息队列通信系统中,通过无锁消息队列创建模块1在共享内存中创建无锁消息队列;并通过写进程通信模块2使无锁消息队列可接收至少一个写进程发送的投递消息,完成消息体的写入;并通过读进程通信模块3使无锁消息队列可接收至少一个读进程发送的读取消息,完成消息体的读取。该无锁消息队列通信系统中所有消息体依据先进先出原则存储在共享内存中,通过写进程和读进程可实现同一设备中多个进程间进行大量数据交互的并发安全通信。

本发明是通过上述具体实施例进行说明的,本领域技术人员应当明白,在不脱离本发明范围的情况下,还可以对本发明进行各种变换和等同替代。另外,针对特定情形或具体情况,可以对本发明做各种修改,而不脱离本发明的范围。因此,本发明不局限于所公开的具体实施例,而应当包括落入本发明权利要求范围内的全部实施方式。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1