环形队列保护共享资源的可靠性

1.环形队列包括三个基础单元:写索引(int),读索引(int),队列单元(数组成员)

2.共享资源访问与读写常见场景:1.线程与线程之间;2.任务与中断之间

3.环形队列通常有两个操作api:第一个api:向环形队列中写数据;第二个api:向环形队列读数据;

        3.1共享资源操作:向环形队列写数据,主要对应写索引(注意写索引一定要等数据添加完毕了才移动,否则会导致共享资源混论:提前标记了数据被写入,实际数据还没来得及写入,就被读取api操作,造成数据混论),写入之前要判断队列是否有空想位置(写指针加一不等于都指针:写指针不能追上读指针),然后再写入数据,最后再操作写指针移动位置。

        3.2向环形队列读取数据,主要对应写索引(同样需要注意等数据读取完毕再移动写指针,否者会读取到异常数据),判断环形队列数据是否为空(写指针加上缓冲区总长度减去读指针,最后对总长度取余),从环形队列读取数据,最后再操作读指针移动位置。

4.另外需要注意的是读写指针需要使用volatile修饰,直接从内存中访问,避免优化后从寄存器读取到中间值。

5.这样就可以防止多线程操作或者中断操作,造成共享数据混乱,当然在多线程中可以使用互斥量操作来阻塞共享资源的访问,但是在中断服务函数中不适用,中断服务函数一般不允许长时间阻塞。

分享观点如果存在问题,欢迎指正,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值