Есть некоторый vector. Один поток добавляет элементы в его конец, а другой - выбирает из головы, т.е. своеобразная очередь. Понимаю, что вариантов синхронзации может быть множество, но среди этого разнообразия хотелось бы получить самый оптимальный, ведь задача то тривиальная.
[C++] Раз уж эта тема опять поднялась06.05.03 18:38 Автор: Ktirf <Æ Rusakov> Статус: Elderman
> Есть некоторый vector. Один поток добавляет элементы в его > конец, а другой - выбирает из головы, т.е. своеобразная > очередь. А ее "своеобразие" нельзя реализовать посредством std::queue? ;)
Про синхронизацию здесь уже сказали.
[C++] vector и многопоточность06.05.03 18:21 Автор: L Статус: Незарегистрированный пользователь
> Есть некоторый vector. Один поток добавляет элементы в его > конец, а другой - выбирает из головы, т.е. своеобразная > очередь. Понимаю, что вариантов синхронзации может быть > множество, но среди этого разнообразия хотелось бы получить > самый оптимальный, ведь задача то тривиальная.
И твой вектор будет бесконечно распухать по мере поступления новых данных. Особенно это приятно, когда реализация STL пользует агрессивную модель выделения памяти.
напиши вокруг буфера минимальнейшую обертку. В числе прочего у тебя там будет целочисленный семафор, который показывает сколько данных готово к обработке, и указатель на начало текущего блока данных.
[C++] vector будет, а deque - нет06.05.03 18:46 Автор: amirul <Serge> Статус: The Elderman Отредактировано 06.05.03 18:49 Количество правок: 1
> И твой вектор будет бесконечно распухать по мере > поступления новых данных. Особенно это приятно, когда > реализация STL пользует агрессивную модель выделения > памяти. deque - кольцевой буфер. И расти будет только если интенсивность добавляющего потока будет выше интенсивности извлекающего.
> напиши вокруг буфера минимальнейшую обертку. В числе > прочего у тебя там будет целочисленный семафор, который > показывает сколько данных готово к обработке, и указатель > на начало текущего блока данных. Не надо велосипедов :-)
deque примерно так и работает
ЗЫ: Упомянутая queue по умолчанию как раз просто интерфейс к deque
[C++] vector будет, а deque - нет06.05.03 19:22 Автор: L Статус: Незарегистрированный пользователь
>[C++] vector будет, а deque - нет
А я разве что-то говорил что-то про deque?
> Не надо велосипедов :-) Не надо обобщений.
Простым задачам - простые решения.
Тут, на самом деле, надо у автора интересоваться.
Если он из академического интереса этим занимается - тогда проще, канеш, пользовать готовое. Если нет - для такой простой вещи лучше написать своё, под задачу. Для некоторых задач, к примеру, лучше притормозить поток, генерящий данные, чем аллоцировать память.
[C++] По-моему, без вариантов - сажаешь на целый vector мьютекс21.04.03 18:39 Автор: Ktirf <Æ Rusakov> Статус: Elderman