Das Beispiel in diesem Artikel beschreibt die Python-Version der Lese-/Schreibsperre-Operationsmethode. Ich teile es Ihnen als Referenz mit:
Der Lese-/Schreibsperrmechanismus wurde kürzlich verwendet, ist jedoch nicht in der integrierten Bibliothek von Python2.7 enthalten .
Über Lese-/Schreibsperren im Internet sprechen Es gibt viele Beispiele, aber das Prinzip ist einfach und der Code ist klar, also schreibe ich einfach selbst eine
Lese-/Schreibsperren werden im Allgemeinen verwendet, wenn mehrere Leser vorhanden sind und ein oder mehrere Autoren greifen gleichzeitig auf eine bestimmte Ressource zu. Ressourcen können von mehreren Lesern gemeinsam genutzt werden, Ressourcen schließen sich jedoch gegenseitig zwischen Autoren und Lesern sowie zwischen Autoren und Autoren aus.
Das bedeutet, dass mehrere Leser oder ein Autor gleichzeitig arbeiten können.
Aufgegliedert können Lese-/Schreibsperren in drei Kategorien unterteilt werden: Leserpriorität, Schreibpriorität und öffentliche Strategie.
Der erste Punkt ist, dass die Leser zuerst kommen.
Der Zweck besteht darin, sicherzustellen, dass die Leser Ressourcen erhalten können, ohne so lange wie möglich warten zu müssen.
Die Hauptpunkte der Implementierung sind für Autoren relativ einfach. Es ist nur eine Sperre erforderlich, um zu steuern, ob geschrieben werden kann.
Was die Leser betrifft, sollten die Schreiber blockiert werden, wenn der erste Leser eintrifft, und die Schreiber sollten geöffnet werden, nachdem der letzte Leser gegangen ist. Es liegt ein Problem mit dem Leserzähler vor. Dieser Zähler muss von allen Lesern gemeinsam genutzt werden. Daher ist eine zusätzliche Sperre erforderlich, um die Atomizität der Additions- und Subtraktionsoperationen des Zählers sicherzustellen.
Implementierungscode:
Definieren Sie eine Klasse RWLock und führen Sie eine einfache Initialisierung durch
import threading class RWLock(object): def __init__(self): self.rlock = threading.Lock() self.wlock = threading.Lock() self.reader = 0
Schreibsperre
def write_acquire(self): self.wlock.acquire() def write_release(self): self.wlock.release()
Lesersperre
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()
Ausführlichere Erläuterungen zur Python-Version der Lese-/Schreibsperre-Operationsmethode finden Sie auf der chinesischen PHP-Website!