2009-05-14 6 views

ответ

0

Если мое понимание вашего вопроса верное, это дуплекс.

С общей памятью оба процесса могут связываться в обоих направлениях, а не только с одним, как с читателем, а с другим - как с писателем. Трубы допускают только чтение или запись, но вы можете преодолеть это, используя два канала (хотя очереди сообщений - лучший вариант).

0

Семафор работает следующим образом ... proc a: «Доступен ли этот ресурс?». Семафор = -2 Да. semaphore ++ proc b: "Is resource ..." semaphore = -1 Да. semaphore ++ proc c: «is resource ...» semaphore = 0 Нет (ничего не происходит)

В этот момент proc c может стоять в очереди (в зависимости от вашего api это может быть цикл занятости или может быть обратный вызов, или вы можете просто создать нерезидентный поток & написать собственный отзыв)

proc a: "im done" semaphore--;

proc c может заметить, что семафор доступен, что-то похожее на то, что я упоминал ранее.

Причина, по которой я написал все это, так я мог сказать, и то и другое. Это похоже на очередь сообщений, в которой вы можете иметь потоки, ожидающие ресурса (разделяемая память, управляемая семафором), которые запускают какое-либо действие, даже фактическое системное сообщение, когда они получают ресурс. Или вы могли бы просто заняться - дождаться, пока это не закончится, и это будет похоже на трубопровод.