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 :


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();
 
?>
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
{		
 
	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();
?>