나는 mod_perl 하에서 실행되는 Perl CGI 프로그램을 가지고있다. 프로그램 내에서 리소스가 동시에 여러 프로세스에 액세스하지 못하도록하고 싶습니다.펄에서 프로세스 간 뮤텍스
# Semaphore Initialization Code
# 10023 is unique id, and this id will be same across different apache process.
# 1, Only one semaphore being created.
# 0722, as all process will be execute under apache account. Hence, they will all having '7' privilege.
my $sem = new IPC::Semaphore(10023, 1, 0722 | IPC_CREAT); # Code(1)
# Set 0th (one and only one) semaphore's value to 1, As I want to use this semaphore as mutex.
$sem->setval(0, 1); # Code(2)
문제는 :
- 가 어떻게 같은 프로세스 또는 다른 프로세스에 의해 하나, 코드 (1) 세마포어가 10023 ID가 이전에 생성되고 있지 않을 경우에만 새로운 세마포어를 생성 할 수 있습니다 ?
- 10023 ID를 가진 세마포어를 처음 만들 때만 코드 (2)를 실행할 수 있습니까? 세마포어는 한 번만 초기화되어야합니다.
또 다른 방법은 잠금 목적으로 빈 파일을 만드는 것입니다. 그러나 이로 인해 수천 개의 임시 파일이 생깁니다. IPC_EXCL
플래그를 추가 link text
왜 수천? 하나의 세마포어를 사용하려면 하나의 파일 만 사용하십시오. – ysth
고객마다 기본 세마포어를 사용하겠습니다. 한 고객이 한 번에 여러 개의 HTTP 요청을 보낼 수 있으므로 가능합니다. –