本文主要是介绍环形队列保护共享资源的可靠性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.环形队列包括三个基础单元:写索引(int),读索引(int),队列单元(数组成员)
2.共享资源访问与读写常见场景:1.线程与线程之间;2.任务与中断之间
3.环形队列通常有两个操作api:第一个api:向环形队列中写数据;第二个api:向环形队列读数据;
3.1共享资源操作:向环形队列写数据,主要对应写索引(注意写索引一定要等数据添加完毕了才移动,否则会导致共享资源混论:提前标记了数据被写入,实际数据还没来得及写入,就被读取api操作,造成数据混论),写入之前要判断队列是否有空想位置(写指针加一不等于都指针:写指针不能追上读指针),然后再写入数据,最后再操作写指针移动位置。
3.2向环形队列读取数据,主要对应写索引(同样需要注意等数据读取完毕再移动写指针,否者会读取到异常数据),判断环形队列数据是否为空(写指针加上缓冲区总长度减去读指针,最后对总长度取余),从环形队列读取数据,最后再操作读指针移动位置。
4.另外需要注意的是读写指针需要使用volatile修饰,直接从内存中访问,避免优化后从寄存器读取到中间值。
5.这样就可以防止多线程操作或者中断操作,造成共享数据混乱,当然在多线程中可以使用互斥量操作来阻塞共享资源的访问,但是在中断服务函数中不适用,中断服务函数一般不允许长时间阻塞。
分享观点如果存在问题,欢迎指正,谢谢
这篇关于环形队列保护共享资源的可靠性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!