Являются ли операции семафора P и V атомарными? - PullRequest
10 голосов
/ 23 февраля 2011

Являются ли операции P () и V (), которые могут быть выполнены с семафором, гарантированными? Может ли семафор предотвратить попадание двух процессов в P ()?

Ответы [ 2 ]

8 голосов
/ 23 февраля 2011

Предположим, у нас есть двоичный семафор s, который имеет значение 1, и два процесса одновременно пытаются выполнить P на s.Только одна из этих операций сможет завершиться до следующей операции V на s;другой процесс, пытающийся выполнить операцию P., приостановлен.

Взято из заметок моего университета:

Мы можем думать, что P и V контролируют доступ к ресурсу:

Когда процесс хочет использовать ресурс, он выполняет операцию P: если это удается, он уменьшает количество доступного ресурса и процесс продолжается;если весь ресурс используется в данный момент, процесс должен ждать.

Когда процесс завершается с ресурсом, он выполняет операцию V: если на ресурсе ожидают процессы, один из них активируется;
, если не было ожидающих процессов, семафорувеличивается, указывая на то, что теперь больше свободного ресурса.Обратите внимание, что определение V не указывает, какой процесс активизируется, если более одного процесса было приостановлено на одном семафоре.

Семафоры могут решать проблемы как взаимного исключения, так и синхронизации условий.Итак, ответ на оба ваших вопроса: да.

3 голосов
/ 23 февраля 2011

Если я правильно помню, да, они есть.Они должны гарантировать, что один поток не может получить ресурсы, в то время как другой поток делает.Если это не так, это будет означать, что два потока могут начать доступ к ресурсу, а затем будут отключены из ЦП, и другой процесс может получить к нему доступ.Это может немного помешать.

Для получения дополнительной информации см. Здесь: http://en.wikipedia.org/wiki/Semaphore_(programming)#Semantics_and_Implementation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...