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.
[blocking = 1]) |
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.
| ) |
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.