Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die Python-Version der Lese-/Schreibsperre-Operationsmethode

Einführung in die Python-Version der Lese-/Schreibsperre-Operationsmethode

高洛峰
高洛峰Original
2017-03-04 15:42:231253Durchsuche

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!

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