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