|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
[Java] Semaphore , semplice domanda
Ho un forte dubbio .
Se ho : Codice:
Semaphore Sem=new Semaphore(3); //ed effettuo 10 acquire ..... Sem.acquire() ..... //sotto l'ipotesi che nell'arco di tempo che effettuo queste acquire // non effettuo nessuna release Ultima modifica di Gin&&Tonic : 02-05-2011 alle 09:49. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Comunque credo che se inizializzi i "permessi" a 3, il semaforo diventi "rosso" quando il contatore interno vale 0, non -1.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
Quote:
//4 perché essendo 3 il valore iniziale le prime 3 lo portano fino a 0. Ho questo dubbio... |
|
|
|
|
|
|
#4 | ||||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Comunque dovrebbe essere sufficiente questo estratto, dal metodo acquire: Quote:
- crei il Semaphore, poniamo new Semaphore(3) (ha tre permessi a disposizione). - Un thread X1 invoca aquire: i permessi sono 3, c'è un permesso disponibile? sì, i permessi passano da 3 a 2; - Un thread X2 invoca aquire: i permessi sono 2, c'è un permesso disponibile? sì, i permessi passano da 2 a 1; - Un thread X3 invoca aquire: i permessi sono 1, c'è un permesso disponibile? sì, i permessi passano da 1 a 0; - Un thread X4 invoca aquire: i permessi sono 0, c'è un permesso disponibile? no, al semaforo non succede niente, al thread X4 invece sì: Quote:
Ecc... per tutti gli altri thread, fino al momento in cui: - o ricevono una richiesta di interrruzione da qualche altro thread - oppure qualche altro thread* invoca il metodo release sul semaforo. *Qui attenzione al fatto che la documentazione dice che il thread che invoca release può essere un qualsiasi altro thread, anche uno che non ha preventivamente "ottenuto un permesso" con un'invocazione su acquire, morale della favola: Quote:
(Sull'onda dell'esempio scrauso riportato nella descrizione della classe nei javadoc direi che un Semaphore in genere viene utilizzato come componente di una qualche altra classe che lo wrappa e che coordina le azioni di acquisizione-rilascio dei permessi con con l'accesso ai dei dati interni da rendere disponibili a più thread tramite la politica del semaforo).
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 02-05-2011 alle 14:29. |
||||
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
Codice:
Che tradotto in soldoni vuol dire che so cazzi tua Credo che sia più veloce togliermi il dubbio scrivendomi il codice..... ahahah |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:38.




















