在Wikipedia: CircularBuffer部分“困难 - >始终保持一个插槽打开”,作者没有提到线程之间同步的任何要求:
始终打开一个广告位
此设计始终保留一个未分配的插槽。完整缓冲区最多(大小为1)个插槽。如果两个指针都指向同一个槽,则缓冲区为空。如果结束(写入)指针指向由开始(读取)指针引用的那个之前的槽,则缓冲区已满。
优点是:
- 解决方案简单而强大。
缺点是:
- 一个插槽丢失,因此当缓冲区大小小>或插槽很大或用硬件实现时,这是一个很糟糕的妥协。
- 完整测试需要模运算Blockquote
为什么没有这样的要求?执行顺序应为:
插入新数据
递增写入索引
但是,如果编译器将顺序颠倒为优化怎么办?