Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Python-Version der Lese-/Schreibsperre-Operationsmethode

Detaillierte Erläuterung der Python-Version der Lese-/Schreibsperre-Operationsmethode

高洛峰
高洛峰Original
2017-03-06 13:49:532100Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn