为什么这种循环缓冲区设计不需要任何同步?

时间:2015-03-23 08:40:58

标签: caching concurrency shared-memory circular-buffer thread-synchronization

Wikipedia: CircularBuffer部分“困难 - >始终保持一个插槽打开”,作者没有提到线程之间同步的任何要求:

  

始终打开一个广告位

     

此设计始终保留一个未分配的插槽。完整缓冲区最多(大小为1)个插槽。如果两个指针都指向同一个槽,则缓冲区为空。如果结束(写入)指针指向由开始(读取)指针引用的那个之前的槽,则缓冲区已满。

     

优点是:

     
      
  • 解决方案简单而强大。
  •   
     

缺点是:

     
      
  • 一个插槽丢失,因此当缓冲区大小小>或插槽很大或用硬件实现时,这是一个很糟糕的妥协。
  •   
  • 完整测试需要模运算Blockquote
  •   

为什么没有这样的要求?执行顺序应为:

  1. 插入新数据

  2. 递增写入索引

  3. 但是,如果编译器将顺序颠倒为优化怎么办?

0 个答案:

没有答案