Реализация кольцевого буфера переменного размера? - PullRequest
0 голосов
/ 29 июня 2019

Я понял идеи, лежащие в основе кольцевого буфера и того, как это помогает не перемещать элементы в процессе.Однако мне любопытно, как лучше всего работать с буфером переменной длины, который является поточно-ориентированным и предлагает аналогичные преимущества кольцевому буферу?Можем ли мы удвоить размер при достижении емкости и сделать так, чтобы один поток выполнял перезапись внутри мьютекса?Будет ли этот просто буфер переменного размера просто очередью, которая реализована для поточной безопасности?Каков наилучший подход и каковы преимущества и недостатки альтернативных решений для этого типа одновременного доступа для чтения / записи?

Ответы [ 2 ]

2 голосов
/ 30 июня 2019

Для многопоточных приложений производителя / потребителя единственный циклический буфер обычно перестает быть хорошей идеей, когда вам нужно его увеличить.

Обычно я переключаюсь на список без блокировок с одиночной связью одноразовых буферов FIFO фиксированного размера с неиспользуемыми буферами, которые можно использовать повторно, хранящимися в стеке без блокировок.

Очередь без блокировки отсюда проста и практична: https://www.cs.rochester.edu/u/scott/papers/1996_PODC_queues.pdf

2 голосов
/ 30 июня 2019

Связанный список может быть лучше, так как при расширении кольцевого буфера копирование не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...