일단 프로세스에 의해 세마포어가 생성되면 모든 프로세스/사용자가 세마포어에 액세스 할 수 있다고 가정합니다.세마포어에 대한 액세스 권한을 설정 하시겠습니까?
특정 프로세스/사용자 만 액세스 할 수 있거나 특정 프로세스 만이 해당 세마포를 릴리스 할 수 있도록 특정 세마포어에 액세스 제한을 설정할 수 있습니까?
모든 프로세스에서 세마포어를 액세스 할 수있게 만들면 몇 가지 문제가 발생합니다. 예 : 더미 프로세스는 세마포어를 읽고 세마포어 잠금을 실제로 기다리고있는 실제 프로세스에 거짓 신호를 보내려는 잠금을 해제 할 수 있습니다. 나는 다음과 같은 코드로 매우 이상한 결과를 얻고로
이러한 모든 문제가 발생됩니다 위의 프로그램을 실행하여
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";
, 나는
Can't create semaphore Can't open semaphore
출력은 다음과 같은 출력을 얻고있다 세마포어를 만들지 못했고 심지어 세마포어를 열지 못했습니다. 지정된 이름으로 세마포어가 이미 존재하면 세마포를 만드는 데 실패 할 수 있습니다. 세마포어를 여는 데 실패한 이유를 모르겠습니다.
세마포어를 생성하는 두 가지 모두가 세마포어를 열지 못하는 시나리오를 명확히 할 수 있습니까?
설정 하시겠습니까? 액세스 제한, 또는 액세스 제한이 문제라고 생각하십니까? –
여기서 액세스 제한이 문제입니다. 세마포어가 다른 프로세스에 의해 먼저 생성되었고 Win32를 사용하여 세마포어를 해제하려고합니다 :: Semaphore –