2010-02-11 57 views

回答

11

是,在很多平臺信號燈可以同步跨進程。您可以使用「命名」信號量 - 多個進程通過名稱訪問對象,與文件系統對象類似。

在POSIX,您可以創建通過sem_open()命名信號。對於unamed信號量,如果sem_init()第二個參數是非零值,也可以是間,雖然我不知道一個無名間信號燈究竟應該如何工作。

注意,在某些系統上,如果信號燈間不支持這些功能可能會失敗,ENOSYS(例如OpenBSD的)。

在Windows中,您可以按@sergiom提到創建命名通過CreateSemaphore()信號燈。

+0

自從版本5.4(2013年11月)以來,OpenBSD [命名爲信號量](http://www.openbsd.org/cgi-bin/man.cgi?query=sem_open&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format= HTML)。參見[這篇博客](http://www.tedunangst.com/flak/post/sem-open-named-semaphores) – user454322 2014-02-07 14:32:29

+0

回覆:「我不知道一個無名間信號燈究竟應該怎樣工作」:您可以將信號置於共享內存中。另外,如果你在普通內存中創建了一個未命名的進程間信號量,然後調用fork(),那麼在父進程和子進程之間就有了IPC。當然,在任何情況下,都不會像命名信號量那樣發現未命名的信號量。但是,無論如何,如果進程之間存在某種其他關係,則通常只需要一個信號量。 – ruakh 2016-07-29 05:40:23

1

POSIX信號量可以是未命名的或 命名。未命名的信號量在進程內存中分配爲 ,初始化爲 。具體取決於信號是如何 分配和初始化超過一個過程, 未命名信號可能 可用。 [...]

想知道more

1

實際上信號量是同步的工具,但bcoz它是由超過1個過程

0

IPC有三種不同的用途等的數據交換(消息隊列,PIPE FIFO),同步(文件訪問它被計數爲一個IPC鎖,信號量,MUTEX)和信號。