linux - 为什么命名信号量可以在任何知道其名称的进程中被线程使用?
问题描述
来自 APUE
POSIX 信号量有两种形式:命名和未命名。它们的创建和销毁方式不同,但在其他方面工作相同。未命名的信号量仅存在于内存中,并且要求进程可以访问内存才能使用这些信号量。这意味着它们只能由同一进程中的线程或已将相同内存范围映射到其地址空间的不同进程中的线程使用。相反,命名信号量是按名称访问的,并且可以由任何知道其名称的进程中的线程使用。
未命名信号量“只能由同一进程中的线程或已将相同内存范围映射到其地址空间的不同进程中的线程使用”,因为“未命名信号量仅存在于内存中”。
命名信号量可以被任何知道其名称的进程中的线程使用的原因是什么?
谢谢。
解决方案
从sem_overview的手册页:
在 Linux 上,命名信号量是在虚拟文件系统中创建的,通常安装在 /dev/shm 下,名称格式为 sem.somename
因此,与普通文件类似,“任何进程中的线程”都可以访问这些文件。
然后 pthread 库可以将这些文件映射到内存。
推荐阅读
- javascript - 如果类相同且值不同,如何获取单击属性的值
- windows - 在执行权限受限的 Jenkins 从站上运行 .bat 命令
- python - django-summernote 从模板查看上传的图片
- bing-maps - Bing Maps V8 SDK - 获取绘制的形状
- html - CSS技巧:将属性值放入另一个css标签
- php - Laravel 中表之间的雄辩关系
- html - 文本正在调整 flexbox 子项的大小而不是换行(使用 flex-grow)
- ruby - Sassc-2.0.0 需要 ruby 版本 >= 2.3.3,与当前版本 ruby 2.3.0p0 不兼容
- javascript - 如果我有三个相同的值,则在不知道值的情况下签入数组
- r - 如何修复计算集群上 R 中的合并错误(fix.by(by.y, y) 中的错误:'by' 必须指定唯一有效的列)