Russian Qt Forum
Ноябрь 23, 2024, 07:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Кольцевой буфер с несколькими потребителями  (Прочитано 7494 раз)
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.049 секунд. Запросов: 23.