Bonjour,
j’ai un problème avec la gestion de sémaphore, pouvez vous m’aider ?
J’ai un main qui fait:
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
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]
J'obtient :
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());
Je ne comprend pas pourquoi le processus 4 n’arrive pas à avoir la sémaphore… Avez vous une idée ?[…]
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
J’ai changé le thread pour voir un peu mieux ce qui se passe :
J'obtient :
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()); [...]
Merci!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)
[…]
Partager