L'exemple de cet article décrit la version python de la méthode d'opération de verrouillage en lecture-écriture. Je le partage avec vous pour votre référence. Les détails sont les suivants :
Le mécanisme de verrouillage en lecture-écriture a été utilisé récemment, mais il n'est pas inclus dans la bibliothèque intégrée de python2.7. .
Parlez des verrous en lecture-écriture en ligne Il existe de nombreux exemples, mais le principe est simple et le code est clair, j'en écris donc simplement un moi-même
Les verrous en lecture-écriture sont généralement utilisés lorsque plusieurs lecteurs. et un ou plusieurs écrivains accèdent à une certaine ressource en même temps. Les ressources peuvent être partagées entre plusieurs lecteurs, mais les ressources s'excluent mutuellement entre écrivains et lecteurs, et entre écrivains et écrivains.
Cela signifie qu'il peut y avoir plusieurs lecteurs ou un seul écrivain travaillant en même temps.
Décomposés, les verrous en lecture-écriture peuvent être divisés en trois catégories : priorité du lecteur, priorité de l'écrivain et stratégie publique.
Le premier est celui des lecteurs d'abord.
Le but est de garantir que les lecteurs puissent obtenir des ressources sans attendre autant que possible.
Les points clés de la mise en œuvre sont relativement simples pour les écrivains. Seul un verrou est nécessaire pour contrôler s'il peut être écrit.
Quant aux lecteurs, les écrivains doivent être bloqués à l'arrivée du premier lecteur, et les écrivains doivent être ouverts après le départ du dernier lecteur. Il y a un problème avec le compteur du lecteur. Ce compteur doit être partagé entre les lecteurs, un verrou supplémentaire est donc nécessaire pour garantir l'atomicité des opérations d'addition et de soustraction du compteur.
Code d'implémentation :
Définir une classe RWLock et effectuer une initialisation simple
import threading class RWLock(object): def __init__(self): self.rlock = threading.Lock() self.wlock = threading.Lock() self.reader = 0
Verrouillage de l'écrivain
def write_acquire(self): self.wlock.acquire() def write_release(self): self.wlock.release()
Verrouillage du lecteur
def read_acquire(self): self.rlock.acquire() self.reader += 1 if self.reader == 1: self.wlock.aquire() self.rlock.release() def read_release(self): self.rlock.acquire() self.reader -= 1 if self.reader == 0: self.wlock.release() self.rlock.release()
Pour plus d'articles sur la version python des méthodes d'opération de verrouillage en lecture-écriture, veuillez faire attention au site Web PHP chinois !