Почему этот круговой дизайн буфера не требует какой-либо синхронизации?

В Википедии: в разделе CircularBuffer "Трудности-> Всегда держать один слот открытым" автор не упоминает никаких требований синхронизации между потоками:

Всегда держите один слот открытым

Этот дизайн всегда сохраняет один слот незанятым. Полный буфер имеет не более (размер-1) слотов. Если оба указателя ссылаются на один и тот же слот, буфер пуст. Если указатель окончания (записи) ссылается на слот, предшествующий тому, на который указывает указатель начала (чтения), буфер заполнен.

Преимущество:

  • Решение простое и надежное.

Недостатки:

  • Один слот теряется, поэтому это плохой компромисс, когда размер буфера мал>, или слот большой или реализован аппаратно.
  • Полный тест требует операции по модулю

Почему нет такого требования? Порядок исполнения должен быть:

  1. Вставьте новые данные

  2. Увеличить индекс записи

Однако что, если компилятор изменяет порядок в порядке оптимизации?

0 ответов

Другие вопросы по тегам