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