Является ли семафор механизмом IPC? - PullRequest
12 голосов
/ 11 февраля 2010

Является ли семафор механизмом IPC?

Ответы [ 4 ]

11 голосов
/ 11 февраля 2010

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

В POSIX вы можете создавать именованные семафоры через <a href="http://www.opengroup.org/onlinepubs/007908799/xsh/sem_open.html" rel="noreferrer">sem_open()</a>. Для немаэрированных семафоров, если второй параметр <a href="http://www.opengroup.org/onlinepubs/007908775/xsh/sem_init.html" rel="noreferrer">sem_init()</a> не равен нулю, он может быть межпроцессным, хотя я не совсем уверен, как именно безымянный межпроцессный семафор должен работать.

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

В Windows вы можете создавать именованные семафоры через <a href="http://msdn.microsoft.com/en-us/library/ms682438(VS.85).aspx" rel="noreferrer">CreateSemaphore()</a>, как упоминал @sergiom.

2 голосов
/ 31 августа 2010

На самом деле Semaphore - это инструмент синхронизации, но он считается как IPC, так как к нему обращается более 1 процесса

2 голосов
/ 11 февраля 2010

Зависит от операционной системы

В Windows к именованным семафорам можно получить доступ между процессами, используя функции CreateSemaphore () и OpenSemaphore ()

http://msdn.microsoft.com/en-us/library/ms682438%28VS.85%29.aspx

1 голос
/ 11 февраля 2010

Семафоры POSIX могут быть безымянными или по имени. Неназванные семафоры выделяется в памяти процесса и инициализируется. Безымянный семафор может может использоваться более чем одним процессом, в зависимости от того, как семафор выделены и инициализированы. [...]

Хотите знать больше ?

...