C++ 无锁环形缓冲区实现

本文介绍了如何在C++中实现无锁环形缓冲区,主要关注在多线程环境下,一个线程读取,一个线程写入的同步问题。关键点包括读写指针的维护以及确保数据一致性。通过设置临时变量来解决写线程多次使用读指针时可能出现的不一致问题,并强调了在提供如GetRingbufDataLen等额外接口时,需确保读写指针值的一致性。
摘要由CSDN通过智能技术生成

        前段时间有个项目要实现一个基于live555的rtspserver,部分功能要用到环形缓冲区,网上看了一些blog,大部分是实验性质的,不太敢用,原理比较简单,所以就自己写了一个;

        实现环形缓冲区的关键点:

        1. 一个线程读,一个线程写

        2. 读线程维护读指针,写线程维护写指针

        3. 数据一致性

        3.1 写线程写数据时,要先确定读指针;读线程读数据时,要先确定写指针;

        这里写的可能比较拗口,其实就是 写线程写数据时,需要多次用使用读指针,比如说计算ringbuf可用空间,是否达到ringbuf末尾等等;由于读指针是在读线程里实时更新的,所以写线程写数据函数多次使用读指针时,读指针的值会不一样;解决这个问题只需要在 读/写 函数 开始处 定义一个临时变量,保存 读/写 指针的值,后续计算都使用该临时变量就OK了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值