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

文档序号:12363223阅读:来源:国知局

技术特征:

1.一种无锁消息队列通信方法,其特征在于,包括:

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

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

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

2.根据权利要求1所述的无锁消息队列通信方法,其特征在于,所述无锁消息队列包括用于存储头部信息的队列头部内存块、用于存储消息索引的消息索引内存块和用于存储消息内容的消息内容内存块;

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

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

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

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

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

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

3.根据权利要求2所述的无锁消息队列通信方法,其特征在于,所述接收至少一个读进程发送的读取消息,并依据接收到读取消息的先后顺序,从所述无锁消息队列的队列头部依序将消息体逐一发送给每一所述读进程,包括:

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

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

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

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

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

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

4.根据权利要求3所述的无锁消息队列通信方法,其特征在于,所述写进程采用原子函数获取队列写权限;所述读进程采用原子函数获取所述队列读权限。

5.根据权利要求1所述的无锁消息队列通信方法,其特征在于,所述将每一所述写进程的投递消息对应的消息体依序写入所述无锁消息队列的队列尾部,还包括:向所有读进程发布消息入队列通知;

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

6.一种无锁消息队列通信系统,其特征在于,包括:

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

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

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

7.根据权利要求6所述的无锁消息队列通信系统,其特征在于,所述无锁消息队列包括用于存储头部信息的队列头部内存块、用于存储消息索引的消息索引内存块和用于存储消息内容的消息内容内存块;

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

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

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

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

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

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

8.根据权利要求7所述的无锁消息队列通信系统,其特征在于,所述读进程通信模块包括:

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

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

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

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

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

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

9.根据权利要求8所述的无锁消息队列通信系统,其特征在于,所述写进程采用原子函数获取队列写权限;所述读进程采用原子函数获取所述队列读权限。

10.根据权利要求6所述的无锁消息队列通信系统,其特征在于,所述写进程通信模块还包括消息入队列通知发布子模块,用于向所有读进程发布消息入队列通知;

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

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