Python版の読み書きロック操作方法の詳細説明

高洛峰
リリース: 2017-03-06 13:49:53
オリジナル
2158 人が閲覧しました

この記事の例では、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()
ログイン後にコピー

さらに詳しく 関連記事はこちらPython 版の読み書きロック操作方法については、PHP 中国語 Web サイトに注意してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート