>  기사  >  백엔드 개발  >  Python 버전의 읽기-쓰기 잠금 작업 방법 소개

Python 버전의 읽기-쓰기 잠금 작업 방법 소개

高洛峰
高洛峰원래의
2017-03-04 15:42:231300검색

이 문서의 예에서는 Python 버전의 읽기-쓰기 잠금 작업 방법을 설명합니다. 참고하실 수 있도록 자세한 내용은 다음과 같습니다.

최근 읽기-쓰기 잠금 메커니즘이 사용되었지만 python2.7의 내장 라이브러리에는 포함되어 있지 않습니다. .
온라인에서 읽기-쓰기 잠금에 대해 이야기하는 경우는 많지만 원리가 간단하고 코드도 명확해서 그냥 직접 작성합니다.

읽기-쓰기 잠금은 일반적으로 여러 명이 사용하는 경우에 사용됩니다. 한 명 이상의 작성자가 동시에 특정 리소스에 액세스합니다. 여러 판독기 간에 리소스를 공유할 수 있지만 작성자와 판독기 간, 작성자와 작성자 간에는 리소스가 상호 배타적입니다.

이는 여러 명의 독자 또는 한 명의 작가가 동시에 작업할 수 있음을 의미합니다.

세분화하여 읽기-쓰기 잠금은 독자 우선순위, 작성자 우선순위 및 공개 전략의 세 가지 범주로 나눌 수 있습니다.

첫 번째는 독자 우선입니다.
독자가 최대한 기다리지 않고 리소스를 얻을 수 있도록 하는 것이 목적입니다.
작성자에게는 구현의 주요 사항이 상대적으로 간단합니다. 쓰기 가능 여부를 제어하려면 하나의 잠금만 있으면 됩니다.
리더의 경우 첫 번째 리더가 도착하면 작가를 차단하고 마지막 리더가 떠난 후에 작가를 열어야 합니다. 판독기 카운터에 문제가 있습니다. 이 카운터는 판독기 간에 공유되어야 하므로 카운터의 덧셈 및 뺄셈 연산의 원자성을 보장하기 위해 추가 잠금이 필요합니다.

구현 코드:

RWLock 클래스를 정의하고 간단한 초기화

import threading
class RWLock(object):
  def __init__(self):
    self.rlock = threading.Lock()
    self.wlock = threading.Lock()
    self.reader = 0

작성자 잠금

def write_acquire(self):
  self.wlock.acquire()
def write_release(self):
  self.wlock.release()

읽기 잠금

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()

더보기 주의하세요 여러 Python 버전의 읽기-쓰기 잠금 작동 방법에 대한 관련 기사를 보려면 PHP 중국어 웹사이트를 방문하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.