Unix семафор вопрос - PullRequest
       8

Unix семафор вопрос

0 голосов
/ 07 декабря 2010

Есть ли способ для семафоров Unix установить их значения?Мне нужно всегда вызывать функцию post () от нескольких потребителей и время от времени вызывать функцию wait (), которая будет ждать до следующего сообщения ().

Как этого достичь?

Причина этого в том, что я реализую проблему «Производитель / Потребитель» (1 производитель / до 2 потребителей).У каждого потребителя есть внутренняя очередь, в которой он хранит элементы, которые, по-видимому, еще не могут быть помещены на выход, поскольку все еще другие пакеты отсутствуют у других потребителей, так что все они выводятся в правильном порядке (как они получены от производителя).,Когда любая из очередей считается заполненной (скажем, с 10 элементами), я бы хотел, чтобы этот процесс ждал, пока другой процесс завершит свою работу (так как есть только 2 процесса, у меня есть гарантия, что пакет этот другой процесс)дает пакет, который мне нужен, чтобы начать выводить некоторые данные!).

Моя идея заключается в том, что каждый раз, когда потребитель обрабатывает что-либо и ищет его для вывода в вывод, он должен вызвать что-то вроде post() на семафор.Каждый раз, когда потребитель заполняет свою очередь, он должен выполнять своего рода wait () для того же семафора.Таким образом, когда другой потребитель заканчивает свою работу, этот просыпается.

Как решить эту ситуацию?Я на правильном пути?В этом проекте я ограничен использованием семафоров и разделяемой памяти.

Конечно, идея состоит в том, чтобы избежать максимально возможного вращения.

Спасибо

Ответы [ 2 ]

1 голос
/ 07 декабря 2010

Похоже, вам больше всего нужен барьер для синхронизации ваших потребителей.Кажется, что Posix дает реализацию этого (pthread_barrier _ *).

Так что создайте свой общий барьер с количеством потребителей;когда потребитель заканчивает работу, он должен «ждать у барьера».

В противном случае вы можете реализовать его с помощью другого семафора.

1 голос
/ 07 декабря 2010

Могу ли я предложить вам посмотреть это видео , данное Стэнфордом на C Paradigms. Этот, в частности, касается использования семафора производителя / потребителя.

...