信号量是一种IPC机制吗?

12

信号量是一种进程间通信机制吗?

4个回答

11

是的,在许多平台上,信号量可以跨进程进行同步。您可以使用“命名”信号量实现这一点——多个进程通过名称访问对象,类似于文件系统对象。

在 POSIX 中,您可以通过sem_open()创建命名信号量。对于未命名的信号量,如果 sem_init() 的第二个参数为非零值,则它可以是进程间的,尽管我不确定未命名的进程间信号量应该如何工作。

请注意,对于某些系统,如果不支持进程间信号量(例如OpenBSD),这些函数可能会失败,并显示ENOSYS

在 Windows 中,您可以通过CreateSemaphore()来创建命名信号量,正如@sergiom所提到的那样。


自从2013年11月的5.4版本以来,OpenBSD就拥有了命名信号量。请参阅此博客文章 - user454322
回复:“我不确定未命名的进程间信号量应该如何工作”,您可以将信号量放置在共享内存中。此外,如果您在正常内存中创建一个未命名的进程间信号量,然后调用 fork(),则父进程和子进程之间就有了IPC。当然,在任何情况下,未命名的信号量都不能像命名信号量那样被发现。但是,通常只有在进程之间存在其他关系时才需要使用信号量。 - ruakh

2

2

实际上,信号量是一种同步工具,但由于它被多个进程访问,因此被视为一种IPC。


1
POSIX 信号量可以是匿名的或有名称的。未命名的信号量在进程内存中分配并初始化。根据信号量的分配和初始化方式,未命名的信号量可能可供多个进程使用。[...] 想了解更多吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接