Bonjour, j'ai un problème d'acces à un semaphore, il semble qu'à chaque fois que j'essaie d'y accéder avec un même référence je n'ai pas le même
le fichier php ci dessus est hébergé via apache sous ubuntu avec PHP 5.6.37
j'ai bien acces à la fonction sem_get
la première fois que j'appel ce php en http j'ai cela comme log :
Resource id #2
PHP Warning: sem_release(): SysV semaphore 2 (key 0x842) is not currently acquired in /data/cms/web/exemple.php on line 25
------Libre ------
Mais la 2 ème fois j'ai cela et cela reste bloqué comme si le release n'était pas fait sur le même que le sem_acquire :
Resource id #1
PHP Warning: sem_release(): SysV semaphore 1 (key 0x842) is not currently acquired in /data/cms/web/exemple.php on line 25
à prioris , même avec un même clef je n'accede pas au même sémaphore, comment faire? remplacer 2114 par une variable static ? un objet singleton ? comment?
si je tente de passer par une variable static cela donne le même résultat
Meric de votre aide
exemple classique :
exemple en static :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <?php phpinfo(); if (!function_exists('sem_get')) { echo "sem_get = non"; }else{ echo "sem_get = oui"; } if (!function_exists('ftok')) { echo " ftok = non"; }else{ echo " ftok = oui"; } class maClass { public function monTest() { $semRes = sem_get(2114, 1, 0666, 0); // get the resource for the semaphore echo strval($semRes); error_log(strval($semRes), 0); sem_release($semRes);// release the semaphore so other process can use it // tente de le libérer pour voir si il est occupé if(sem_acquire($semRes)) { // try to acquire the semaphore. this function will block until the sem will be available echo "------Libre ------"; error_log("------Libre ------", 0); }else{ echo "----------Pas Libre-------"; error_log("------Pas Libre ------", 0); } } } $mc = new maClass; $mc->monTest(); ?>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <?php phpinfo(); if (!function_exists('sem_get')) { echo "sem_get = non"; }else{ echo "sem_get = oui"; } if (!function_exists('ftok')) { echo " ftok = non"; }else{ echo " ftok = oui"; } class maClass { private static $SEMKey = "2002"; public function monTest() { $semRes = sem_get(maClass::$SEMKey, 1, 0666, 0); // get the resource for the semaphore echo strval($semRes); error_log(strval($semRes), 0); sem_release($semRes);// release the semaphore so other process can use it // tente de le libérer pour voir si il est occupé if(sem_acquire($semRes)) { // try to acquire the semaphore. this function will block until the sem will be available echo "------Libre ------"; error_log("------Libre ------", 0); }else{ echo "----------Pas Libre-------"; error_log("------Pas Libre ------", 0); } } } $mc = new maClass; $mc->monTest(); ?>
Partager