gpt4 book ai didi

c - Windows 操作系统中命名信号量的位置是什么

转载 作者:可可西里 更新时间:2023-11-01 11:12:15 26 4
gpt4 key购买 nike

在 Linux 操作系统中,命名信号量是使用 sem_open API 在/dev/shm/位置创建的。我正在使用 CreateSemaphore 在 Windows 中创建命名信号量。在 Windows 中创建的命名信号量位于哪个位置?

最佳答案

Windows 命名 信号量存在于内核的内部对象命名空间中。该数据库具有类似文件系统的分层树结构,但通过常规文件系统函数不可见。使用 Object Viewer tool来自 Sysinternals(现在是 Microsoft 的子公司)探索该领域。毫不奇怪,信号量具有对象类型 Semaphore。在其他对象中,互斥体被称为Mutant(显然,David Cutler 将这些称为“突变信号量”,私有(private)通信)。 EventPair 对象不能通过 Win32 API 使用。所有其他同步原语在那里都是 self 识别的。

我认为用于从用户空间访问此数据空间的 API 没有完整记录。 Windows DDK header 确实很有趣。

未命名对象(那些使用 NULL 作为对象名称传递的对象)供单个进程使用,并且只能选择性地由其子进程继承。这些未在内核对象命名空间中注册。

与 POSIX 信号量不同,当这些对象的最后一个句柄关闭时,所有 Windows 对象都会自动删除(就好像 sem_open 总是调用 sem_unlink),并且所有进程句柄都关闭在进程终止时由内核执行程序执行,无论是正常终止还是中止。我要提到的是,如果您提出问题的动机是验证当所有使用信号量的进程都死掉时没有留下任何信号量。

关于c - Windows 操作系统中命名信号量的位置是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31852055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com