Re: Общая память и семафоры - PullRequest
0 голосов
/ 15 мая 2009

Использует ли механизм IPC разделяемую память и семафоры для симплексной синхронизации, такой как каналы, или дуплекса, как очереди сообщений?

Ответы [ 2 ]

0 голосов
/ 15 мая 2009

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

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

0 голосов
/ 15 мая 2009

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

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

proc a: семафор "im done" -;

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

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

...