プロセスによってセマフォが作成されると、どのプロセス/ユーザーからもアクセスできるようになると想定しています。
特定のセマフォにアクセス制限を設定して、特定のプロセス/ユーザーのみがアクセスできるようにしたり、特定のプロセスのみがセマフォを解放できるようにすることは可能ですか?
すべてのプロセスがセマフォにアクセスできるようにすると、いくつかの問題が発生します。例: ダミー プロセスがセマフォを読み取ってロックを解放し、実際にセマフォ ロックを待機している実際のプロセスに誤ったシグナルを送信することができます。
次のコードスニペットで非常に奇妙な出力が得られるため、これらすべての質問が発生しています。
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";
上記のプログラムを実行すると、次の出力が得られます
セマフォを作成できません セマフォをオープンできません
出力は、セマフォの作成に失敗し、セマフォを開くことさえできなかったことを示しています。指定された名前のセマフォが既に存在する場合、セマフォの作成に失敗する可能性があります。セマフォのオープンに失敗した理由がわかりません。
セマフォの作成とセマフォを開くの両方が失敗するシナリオを明確にすることができます。