Threadsafe очередь

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Threadsafe очередь

Сообщение Иван Шихалев »

Вопрос, скорее, к обсуждению — могут быть разные варианты...

Задача следующая: организовать очередь данных, передаваемых между потоками. Причем формирование данных происходит блоками — блок сформирован, передан, дальше с ним работает только принимающий поток. Какие-либо конфликты могут возникнуть только в самой очереди.

Какие будут соображения?

Добавлено спустя 47 секунд:
Да, и очень желательно, чтобы механизм был кроссплатформенный.
Аватара пользователя
*vmr
постоялец
Сообщения: 168
Зарегистрирован: 08.01.2007 00:46:07
Откуда: Киев
Контактная информация:

Сообщение *vmr »

Давно использую закольцованный буффер-FIFO, с абсолютными индексами: http://en.wikipedia.org/wiki/Circular_queue
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Зачем кольцевать? На чем блокировки делать?
Аватара пользователя
*vmr
постоялец
Сообщения: 168
Зарегистрирован: 08.01.2007 00:46:07
Откуда: Киев
Контактная информация:

Сообщение *vmr »

В том то и фишка что из-за закольцованности-абсолютности-индекса блокировки не нужно делать.
Смотри по ссылке внимателней.

Добавлено спустя 2 минуты 22 секунды:
Т.е. имеем lock-free очередь
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Ничего не понял, честно говоря... Попробую завтра, выспавшись.

Добавлено спустя 18 часов 20 минут 25 секунд:
Я правильно понял, что блокировки не нужны, поскольку каждый из индексов изменяется только «своим» потоком (хотя и проверяется обоими)?
Ответить