Що таке кільцевої буфер?

Реалізація циклічній черги

Приступаючи до реалізації, визначають типи даних, а потім методи: core, push та pop. У процедурах «push» і «pop» обчислюють «такі» точки зсуву місця, в якому буде відбуватися поточна запис і читання. Якщо таке розташування вказує на хвіст, значить, буфер заповнений і дані не записуються. Точно так же, коли «head» дорівнює «tail», він порожній і з нього нічого не читається.

Стандартний варіант використання

Допоміжна процедура викликається процесом програми для витягання даних з кільцевого буфера Java. Вона має бути включена в критичні розділи, якщо зчитують контейнер більше одного потоку. Хвіст переміщується до наступного зсуву до того, як інформація буде прочитана, оскільки кожен блок становить один байт і резервується аналогічну кількість в буфері, коли обсяг повністю завантажений. Але в більш просунутих реалізаціях циклічного накопичувача поодинокі розділи необов’язково повинні бути однакового розміру. У таких випадках намагаються зберегти навіть останній байт, додавши більше перевірок і кордонів.

В таких схемах, якщо хвіст пересувається перед читанням, інформація, яка повинна бути прочитана, потенційно може бути перезаписана знову висунутими даними. У загальному випадку рекомендується спочатку читати, а потім переміщати хвостовий покажчик. Спочатку визначають довжину буфера, а потім створюють примірник «circ_bbuf_t» і призначають покажчик «maxlen». При цьому контейнер повинен бути глобальним або перебувати в стеку. Так, наприклад, якщо потрібен кільцевої буфер довжиною 32 байта, виконують у додатку наступне (див. малюнок нижче).