ホームページ  >  記事  >  バックエンド開発  >  Python版の読み書きロック操作方法の紹介

Python版の読み書きロック操作方法の紹介

高洛峰
高洛峰オリジナル
2017-03-04 15:42:231293ブラウズ

この記事の例では、Python バージョンの読み取り/書き込みロック操作メソッドについて説明します。参考までに、詳細は以下の通りです:

読み書きロック機構は最近使われていますが、Python2.7の組み込みライブラリには含まれていません
たくさんの例があります。

読み取り/書き込みロックは、通常、複数のリーダーと 1 つ以上のライターが特定のリソースにアクセスする場合に使用されます。同時。リソースは複数のリーダー間で共有できますが、リソースはライターとリーダー間、およびライターとライター間で相互に排他的です。

これは、複数のリーダーまたは 1 人のライターが同時に作業できることを意味します。

読み書きロックを詳しく見ると、リーダーの優先順位、ライターの優先順位、パブリック戦略の 3 つのカテゴリに分類できます。

1つ目は読者ファーストです
その目的は、読者ができるだけ待たずにリソースを入手できるようにすることです。
実装の重要な点は、書き込み可能かどうかを制御するために必要なロックは 1 つだけであり、ライターにとっては比較的簡単です。
リーダーに関しては、最初のリーダーが到着したときにライターをブロックし、最後のリーダーが去った後にライターを開く必要があります。リーダー カウンタに問題があるため、このカウンタはリーダー間で共有する必要があるため、カウンタの加算および減算操作のアトミック性を保証するために追加のロックが必要です。

実装コード:

クラス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()

more Python にご注意ください読み取り/書き込みロックの操作方法のバージョンに関する関連記事については、PHP 中国語 Web サイトを参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。