[发明专利]用于无阻塞通讯的无锁环形队列实现方法在审
申请号: | 202010567512.1 | 申请日: | 2020-06-19 |
公开(公告)号: | CN111767154A | 公开(公告)日: | 2020-10-13 |
发明(设计)人: | 鹿国照 | 申请(专利权)人: | 北京思特奇信息技术股份有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52;G06F9/50 |
代理公司: | 北京汇信合知识产权代理有限公司 11335 | 代理人: | 林聪源 |
地址: | 100086 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 阻塞 通讯 环形 队列 实现 方法 | ||
1.一种用于无阻塞通讯的无锁环形队列实现方法,其特征在于,包括:
调用write函数将外部数据写入CycleBufferSend子类的内部缓存;
调用SendBegin函数由所述内部缓存中读取数据的指针和大小并存放至数组结构中;
调用系统发送函数发送所述数组结构中的数据;
调用SendEnd函数修改所述CycleBufferSend子类的内部发送状态,完成报文发送;
调用RecvBegin函数将缓冲地址存放至所述数组结构中;
调用系统接收函数接收所述系统发送函数发送的数据,并存放至所述数组结构中;
调用RecvEnd函数修改CycleBufferRecv子类的内部接收状态,完成报文接收;
调用read函数由所述CycleBufferSend子类的内部缓存中读取数据。
2.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,还包括:
在调用所述write函数写入数据之前调用space函数检查是否有空间用以实现写入操作;
在调用所述read函数读取数据之前调用length函数动态计算数据长度,以检查是否有可读取的数据。
3.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,在调用所述write函数后修改写指针的位置,在调用所述SendBegin函数后内部发送状态修改为发送中,数据发送完成后修改读指针的位置,同时将内部发送状态修改为未发送。
4.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,在调用所述RecvBegin函数后将内部接收状态修改为接收中,数据接收完成后修改写指针的位置,同时将内部接收状态修改为未接收。
5.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,所述数组结构具有填充两个数组元素的空间,以实现同时向所述数组结构中填充两段数据。
6.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,所述space函数和所述write函数利用生产者线程调用,所述SendBegin函数、所述系统发送函数和所述SendEnd函数利用消费者线程调用;
所述RecvBegin函数、所述系统接收函数和所述RecvEnd函数利用生产者线程调用,所述length函数和所述read函数利用消费者线程调用。
7.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,在所述CycleBufferRecv子类中,设置私有成员变量用以标记是否正在接收数据,所述私有成员变量在RecvBegin函数中赋值为true,在RecvEnd函数中赋值为false。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京思特奇信息技术股份有限公司,未经北京思特奇信息技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010567512.1/1.html,转载请声明来源钻瓜专利网。