Bonjour,
j’ai un problème avec la gestion de sémaphore, pouvez vous m’aider ?
J’ai un main qui fait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Main
[boucle]
if(DEBUG) System.out.println("main: asking...");
semaphore.acquire();
if(DEBUG) System.out.println("main: got the permit!");
 … traitement …
semaphore.release();
if(DEBUG)System.out.println("main: released lock: available Semaphore permits now:" + semaphore.availablePermits());
[fin boucle]
En parallèle je lance des processus Thread(i) qui récupère la sémaphore pour faire des traitements sur une variable partagée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Thread(i)
if(DEBUG) System.out.println(i + " : asking...  available Semaphore permits now: " + semaphore.availablePermits());
semaphore.acquire();
… traitement …
semaphore.release();
if(DEBUG)System.out.println(i +": released lock: available Semaphore permits now:" + semaphore.availablePermits());
J'obtient :
[…]
main: asking...
main: got the permit!
main: released lock: available Semaphore permits now:1
4 : asking... available Semaphore permits now: 0
6 : asking... available Semaphore permits now: 0
5 : asking... available Semaphore permits now: 0
Je ne comprend pas pourquoi le processus 4 n’arrive pas à avoir la sémaphore… Avez vous une idée ?
J’ai changé le thread pour voir un peu mieux ce qui se passe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Thread(i)
while(semaphore.availablePermits()==0) {
	System.out.println(i + " sleep (av permit=0)");
	Thread.sleep(10000);
}
 
if(DEBUG)System.out.println(i + " : asking...  available Semaphore permits now: " + semaphore.availablePermits());
[...]
J'obtient :
main: asking...
main: got the permit!
main: released lock: available Semaphore permits now:1
4 sleep (av permit=0)
6 sleep (av permit=0)
5 sleep (av permit=0)
4 sleep (av permit=0)
[…]
Merci!