【发布时间】:2009-09-21 19:34:56
【问题描述】:
我假设一旦信号量由进程创建,任何进程/用户都可以访问它。
是否可以对特定信号量设置访问限制,使其只能由某些进程/用户访问,或者只有某些进程才能释放信号量。
如果我们让所有进程都可以访问一个信号量,我会发现一些问题。例如:一个虚拟进程可以读取信号量并在希望释放锁时向真正等待信号量锁的实际进程发出错误信号。
所有这些问题都出现了,因为我使用以下代码 sn-p 得到了非常奇怪的输出:
use Win32::Semaphore;
$sem = Win32::Semaphore->new(0, 1,"reliance2692")
or print "Can't create semaphore\n";
$sem = Win32::Semaphore->open("reliance2692")
or print "Can't open semaphore\n";
print "Semaphore:" . $sem . "\n";
通过运行上述程序,我得到以下输出
无法创建信号量 无法打开信号量输出显示创建信号量失败,甚至打开信号量失败。 如果已存在具有给定名称的信号量,则创建信号量可能会失败。 我不明白为什么打开信号量失败。
能否澄清一下创建信号量和打开信号量都失败的情况。
【问题讨论】:
-
您想设置访问限制,还是您认为访问限制有问题?
-
这里的访问限制是问题所在。由于信号量是由另一个进程较早创建的,我想使用 Win32::Semaphore 释放信号量