信号量是一种进程间通信机制吗?
是的,在许多平台上,信号量可以跨进程进行同步。您可以使用“命名”信号量实现这一点——多个进程通过名称访问对象,类似于文件系统对象。
在 POSIX 中,您可以通过sem_open()
创建命名信号量。对于未命名的信号量,如果 sem_init()
的第二个参数为非零值,则它可以是进程间的,尽管我不确定未命名的进程间信号量应该如何工作。
请注意,对于某些系统,如果不支持进程间信号量(例如OpenBSD),这些函数可能会失败,并显示ENOSYS
。
在 Windows 中,您可以通过CreateSemaphore()
来创建命名信号量,正如@sergiom所提到的那样。
这取决于操作系统。
在Windows中,可以使用CreateSemaphore()和OpenSemaphore()函数在进程之间访问命名信号量。
http://msdn.microsoft.com/en-us/library/ms682438%28VS.85%29.aspx
实际上,信号量是一种同步工具,但由于它被多个进程访问,因此被视为一种IPC。
fork()
,则父进程和子进程之间就有了IPC。当然,在任何情况下,未命名的信号量都不能像命名信号量那样被发现。但是,通常只有在进程之间存在其他关系时才需要使用信号量。 - ruakh