在Linux OS中,使用sem_open API在/ dev / shm / location创建命名信号量。我正在使用CreateSemaphore在Windows中创建命名信号量。在哪个位置是在Windows中创建的命名信号量?
答案 0 :(得分:3)
Windows 命名信号灯与内核的内部对象名称空间一起存在。该数据库具有类似文件系统的分层树结构,但是无法通过常规文件系统功能看到。使用Sysinternals(现在是Microsoft的子公司)中的Object Viewer tool来探索该空间。毫无疑问,信号量具有对象类型 Semaphore 。在其他对象中,互斥锁称为 Mutant (显然,在David Cutler将其称为“突变信号量”,即私人通信之后)。通过Win32 API, EventPair 对象不可用。在那里所有其他同步原语都是可识别的。
我认为用于从用户空间访问此数据空间的API尚未完全记录。 Windows DDK标头确实是一个有趣的读物。
未命名的对象(使用作为对象名称传递的NULL
创建的对象)仅供单个进程使用,并且只能选择由其子进程继承。这些未在内核对象名称空间中注册。
与POSIX信号不同,所有Windows对象在最后一个句柄关闭时都会自动删除(就像sem_open
始终称为sem_unlink
一样),而所有进程句柄在执行时都会由内核执行程序关闭。进程终止,无论是正常终止还是中止。我要提到的是,如果您提出这个问题的动机是要验证所有使用它们的进程都死了,那么就不会留下任何信号量。
答案 1 :(得分:2)
Windows中没有信号量的文件系统或其他位置,您只能通过CreateSemaphore
访问它们。 Linux有虚拟文件系统,提供对几个命名内核对象的访问,但在Windows中情况并非如此,很少有需要。