Страница 1 из 1

Threadsafe очередь

СообщениеДобавлено: 03.05.2009 21:26:20
Иван Шихалев
Вопрос, скорее, к обсуждению — могут быть разные варианты...

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

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

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

Re: Threadsafe очередь

СообщениеДобавлено: 04.05.2009 00:07:30
*vmr
Давно использую закольцованный буффер-FIFO, с абсолютными индексами: http://en.wikipedia.org/wiki/Circular_queue

Re: Threadsafe очередь

СообщениеДобавлено: 04.05.2009 00:13:09
Иван Шихалев
Зачем кольцевать? На чем блокировки делать?

Re: Threadsafe очередь

СообщениеДобавлено: 04.05.2009 00:21:26
*vmr
В том то и фишка что из-за закольцованности-абсолютности-индекса блокировки не нужно делать.
Смотри по ссылке внимателней.

Добавлено спустя 2 минуты 22 секунды:
Т.е. имеем lock-free очередь

Re: Threadsafe очередь

СообщениеДобавлено: 04.05.2009 00:31:51
Иван Шихалев
Ничего не понял, честно говоря... Попробую завтра, выспавшись.

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