7.5.1 Oggetti Lock

Un lock primitivo � una primitiva di sincronizzazione che non � posseduta da nessun particolare thread quando � bloccata. In Python, al momento � la primitiva di sincronizzazione di pi� basso livello disponibile, implementata direttamente dal modulo di estensione thread.

Un lock primitivo si trova in uno dei due stati, ``bloccato'' o ``sbloccato''. Viene creato nello stato sbloccato. Possiede due metodi di base, acquire() e release(). Quando lo stato � sbloccato. acquire() modifica lo stato a bloccato, e restituisce immediatamente. Quando lo stato � bloccato, acquire() si blocca fino che la chiamata release() in un altro thread lo modifichi a sbloccato, quindi la chiamata a acquire() lo reimposta in modo bloccato e restituisce. Il metodo release() dovrebbe essere chiamato solo nello stato bloccato; modifica lo stato in sbloccato e restituisce immediatamente. Quando pi� di un thread � bloccato in acquire(), in attesa che lo stato venga cambiato in sbloccato, solo un thread procede quando una chiamata a release() reimposta lo stato a sbloccato; quale dei thread in attesa proceder� in seguito non � definito, e pu� variare a seconda dell'implementazione.

Tutti i metodi sono eseguiti atomicamente.

acquire( [blocking = 1])
Acquisisce un lock, bloccante o non bloccante.

Quando viene invocato senza argomenti, si blocca fino a che il lock � sbloccato, quindi lo blocca e restituisce. Non c'� alcun valore restituito in questo caso.

Quando viene invocato con l'argomento blocking impostato a vero, esegue le stesse cose di quando viene chiamato senza argomenti, e restituisce vero.

Quando viene invocato con l'argomento blocking impostato a falso, non si blocca. Se una chiamata senza un argomento si bloccherebbe, restituisce falso immediatamente; altrimenti, esegue le stesse azioni di quando viene chiamato senza argomenti, e restituisce vero.

release( )
Rilascia un lock.

Quando un lock � bloccato, lo reimposta come sbloccato, e restituisce. Se qualunque altro thread � bloccato in attesa che il lock si sblocchi, permette solo a uno di loro di procedere.

Non chiamare questo metodo quando il lock � sbloccato.

Non esiste valore di ritorno.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.