首页 > 解决方案 > 为什么命名信号量可以在任何知道其名称的进程中被线程使用?

问题描述

来自 APUE

POSIX 信号量有两种形式:命名和未命名。它们的创建和销毁方式不同,但在其他方面工作相同。未命名的信号量仅存在于内存中,并且要求进程可以访问内存才能使用这些信号量。这意味着它们只能由同一进程中的线程或已将相同内存范围映射到其地址空间的不同进程中的线程使用。相反,命名信号量是按名称访问的,并且可以由任何知道其名称的进程中的线程使用。

未命名信号量“只能由同一进程中的线程或已将相同内存范围映射到其地址空间的不同进程中的线程使用”,因为“未命名信号量仅存在于内存中”。

命名信号量可以被任何知道其名称的进程中的线程使用的原因是什么?

谢谢。

标签: linuxposixsemaphore

解决方案


sem_overview的手册页:

在 Linux 上,命名信号量是在虚拟文件系统中创建的,通常安装在 /dev/shm 下,名称格式为 sem.somename

因此,与普通文件类似,“任何进程中的线程”都可以访问这些文件。

然后 pthread 库可以将这些文件映射到内存。


推荐阅读