Das Beispiel in diesem Artikel beschreibt die Python-Version der Lese-/Schreibsperre-Operationsmethode. Ich teile es Ihnen als Referenz mit:
Der Mechanismus der Lese-/Schreibsperre wurde kürzlich verwendet, ist jedoch nicht in der integrierten Bibliothek von Python2 enthalten. 7.
Online-Diskussion über Lese-/Schreibsperren Es gibt viele Beispiele, aber das Prinzip ist einfach und der Code ist klar, aber nicht viele, also schreiben Sie einfach selbst eine
Im Allgemeinen werden Lese-/Schreibsperren verwendet damit mehrere Leser und ein oder mehrere Autoren gleichzeitig auf eine bestimmte Ressource zugreifen können. 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()
Weitere verwandte Artikel zur Python-Version der Lese-/Schreibsperren-Operationsmethoden finden Sie auf der chinesischen PHP-Website!