@alexgugr
HTML/CSS/JS, C++, Python и т.д.

Как решить задачу «читателя и писателя» с буферным пулом (динамическим массивом)?

Сама задача:
Рассмотрим взаимодействие двух потоков, один из которых пишет данные в буферный пул, а другой считывает их из пула. Буферный пул состоит из N буферов, каждый содержит одну запись. В общем случае поток-писатель и поток-читатель имеют разные скорости (длительности выполнения операция чтения и записи) и обращаются к пулу с переменной интенсивностью (начинают выполнять операции в случайные моменты времени с равномерным законом распределения). Для правильной работы поток-писатель приостанавливается, когда все буферы заняты, и переходит в активное состояние при наличии хотя бы одного свободного буфера. Поток-читатель приостанавливается, когда все буферы пусты, и активизируется, когда появляется, по крайней мере, одна запись.
Количество потоков-писателей и читателей, длительности операций чтения и записи, размер буферного пула устанавливаются пользователем.

Буферный пул в данном случае - динамический массив, если я верно понял преподавателя. По условию задачи поток-читатель и поток-писатель приостанавливаются в ожидании непустого и пустого буфера соответственно.

Каким образом реализовать проверку на наличие пустого-непустого буфера, чтобы активизировались потоки?
Каким образом передавать в поток-читатель или в поток-писатель адрес освободившегося буфера для работы с ним?

Основной принцип работы потоков схож с примером на википедии (тут), но можно решить и с 2 семафорами.
  • Вопрос задан
  • 1277 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы