J'ai un programme CGI Perl qui s'exécute sous mod_perl. Dans le programme, je voudrais empêcher une ressource d'accéder par plusieurs processus en même temps.Interprocess Mutex En Perl
# 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)
Le problème est:
- Comment puis-je faire le code (1) créer une nouvelle sémaphores que lorsque les sémaphores si l'identifiant 10023 n'a jamais été créé auparavant, soit par même processus ou d'autres processus ?
- Comment exécuter le code (2) SEULEMENT la première fois que je crée le sémaphore avec l'ID 10023? Un sémaphore doit être initialisé UNIQUEMENT.
Une autre approche consiste à créer un fichier vide à des fins de verrouillage. Cependant, cela se traduira par des milliers de fichiers temporaires. link text
Pourquoi des milliers de fichiers temporaires? Si vous prévoyez d'utiliser un sémaphore, vous utiliseriez un seul fichier. – ysth
Je vais utiliser sémaphore par client de base. Comme il est possible pour un client d'envoyer plusieurs requêtes HTTP en même temps. –