Un lock rientrante � una primitiva di sincronizzazione che pu� essere acquisita pi� volte dallo stesso thread. Internamente, utilizza il concetto di ``thread proprietario'' e ``livello di ricorsione'' in aggiunta agli stati bloccato/sbloccato usate dai lock primitivi. Nello stato bloccato, alcuni thread possiedono il lock; nello stato sbloccato, esso non � posseduto da alcun thread.
Per bloccare il lock, un thread chiama il suo metodo acquire(); questi restituisce una volta il thread proprietario del lock. Per sbloccare il lock, un thread chiama il suo metodo release(). La coppia di chiamate acquire()/release() pu� essere nidificata; solo la chiamata finale a release() (la release() della coppia pi� esterna) reimposta il lock a sbloccato e permette ad un altro thread bloccato in acquire() a procedere.
[blocking = 1]) |
Quando viene invocato senza argomenti: se questo thread possiede gi� il lock, incrementa il livello di ricorsione di uno, e restituisce immediatamente. Altrimenti, se un altro thread possiede il lock, si blocca fino a che il lock non venga sbloccato. Una volta che il lock � sbloccato (non posseduto da alcun thread), ne ottiene la propriet�, ne imposta il valore di ricorsione ad uno e ritorna. Se pi� di un thread � bloccato in attesa dello sblocco del lock, solo un thread allo volta potr� ottenere il possesso del lock. Non viene restituito alcun valore in questo caso.
Quando viene invocata con l'argomento blocking impostato a vero, esegue le stesse azioni di quando viene chiamata senza argomenti, e restituisce vero.
Quando viene invocata con l'argomento blocking impostato a falso, non si blocca. Se una chiamata senza un argomento si bloccherebbe, restituisce falso immediatamente; altrimenti, fa le stesse azioni di quando viene chiamata senza argomenti, e restituisce vero.
| ) |
Chiamate questo metodo solo quando il thread chiamante possiede il lock. Non chiamate questo metodo quando il lock � sbloccato.
Non c'� alcun valore restituito.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.