Russian Qt Forum
Марта 11, 2025, 08:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Кольцевой буфер с несколькими потребителями  (Прочитано 7597 раз)
Serr500
Гость
« : Августа 24, 2011, 14:36 »

Возникла интересная задачка. Не могу никак сообразить как её решить наиболее оптимальным путём. То ли туплю, то ли знаний не хватает...  Непонимающий

Итак, есть кольцевой буфер (Circular Buffer), поток-производитель (Producer Thread) и потоки-потребители (Consumer Threads). Производитель заполняет ячейки буфера, потребители их считывают. Ячейка буфера должна быть доступна для производителя не раньше чем ВСЕ потребители считают из неё данные. Алгоритм работы обычного кольцевого буфера (один производитель, один потребитель) не подходит, поскольку в нём после прочтения уже одним потребителем объект синхронизации разрешит производителю перезапись блока.

Ситуация осложняется ещё тем, что число потребителей может меняться в процессе выполнения. Впрочем, по условиям задачи их число не может возрастать, что несколько упрощает дело. Однако, на это пока можно не обращать внимания, для начала можно решить задачу и с неизменным числом потребителей

Каким образом можно реализовать такой буфер? Какие объекты синхронизации использовать в данном случае? Буду очень благодарен за любую помощь. Заранее спасибо.
« Последнее редактирование: Августа 22, 2012, 11:12 от Serr500 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Августа 24, 2011, 18:25 »

Долго объяснять, проще написать (аттач). Выводить из игры "потребителя" можно просто поставив ему stopFlag (не нужно удалять его из вектора, себе дороже)
Записан
Serr500
Гость
« Ответ #2 : Августа 25, 2011, 16:09 »

Спасибо. Буду разбираться.
Записан
Serr500
Гость
« Ответ #3 : Ноября 07, 2011, 17:13 »

Нашёл в сети уже готовый класс, который почти без изменений подошёл к моей задаче. Может, кому-то пригодится. http://tver-soft.ru/index.php/articles/5-ring-buffer
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноября 07, 2011, 18:49 »

Нашёл в сети уже готовый класс, который почти без изменений подошёл к моей задаче. Может, кому-то пригодится. http://tver-soft.ru/index.php/articles/5-ring-buffer
Сравнивая даты постов - время с августа по ноябрь было посвящено поискам?  Улыбающийся
Записан
Serr500
Гость
« Ответ #5 : Августа 22, 2012, 11:12 »

Сайт автора переехал на другой адрес. Теперь статья здесь: http://tver-soft.org/ru/articles/cpp/14-ring-buffer.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.181 секунд. Запросов: 22.