Есть ли способ с помощью семафоров unix установить их значения? Мне нужно всегда вызывать post() от нескольких потребителей и время от времени вызывать wait(), который будет ждать, пока не произойдет следующий post().
Как этого добиться?
Причина этого в том, что я реализую проблему производителя/потребителя (1 производитель/до 2 потребителей). У каждого потребителя есть внутренняя очередь, в которой он хранит элементы, которые, по-видимому, еще не могут быть помещены на выход, так как есть еще другие пакеты, отсутствующие у других потребителей, поэтому все они выводятся в правильном порядке (как они пришли от производителя) . Когда любая из очередей считается заполненной (скажем, с 10 элементами), я бы хотел, чтобы этот процесс ждал, пока другой процесс завершит свою работу (поскольку есть только 2 процесса, у меня есть гарантия, что пакет, который другой процесс yield — это пакет, который мне нужен, чтобы начать что-то выводить!).
Моя идея состоит в том, что каждый раз, когда потребитель что-то обрабатывает и ищет, чтобы поместить это в вывод, он должен вызывать что-то вроде post() на семафоре. Каждый раз, когда потребитель переполняет свою очередь, он должен выполнять что-то вроде wait() на том же семафоре. Таким образом, когда другой потребитель закончит свою работу, этот проснется.
Как следует решить эту ситуацию? Я на правильном пути? В этом проекте я ограничен использованием семафоров и общей памяти.
Конечно, идея состоит в том, чтобы как можно меньше вращаться.
Спасибо