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.