WithLock

WithLock[File["path"],expr]

ファイル path をロックして expr を評価した後で,そのファイルを解放する.

WithLock[LocalSymbol["name"],expr]

局所シンボル name をロックして expr を評価した後で,その局所シンボルを解放する.

WithLock[var,expr]

共有変数 var をロック,expr を評価し,共有変数を解放する.

詳細とオプション

  • WithLockFileまたはLocalSymbolを作ることでロックする.WithLockFileまたはLocalSymbolを削除することで解放する.
  • WithLockは,ロックオブジェクトがすでにロックされている場合はロックが解放されるまで待つ.
  • ロックはアトミックである.最大で1つのプロセスしかオブジェクトをロックできないので,そのプロセスが expr を独占的に評価できる.
  • WithLockは属性HoldAllを持つ.
  • 次は,使用可能なオプションである.
  • TimeConstraint Infinityロックが使用可能になるまで待つ時間
    ExpirationDate Noneロックがいつ期限切れになるか
    PersistenceTime Infinityロックが有効である期間
  • TimeConstraintの時間内でロックが得られなければ,WithLock$TimedOutを返し,expr の評価は行わない.
  • 有効期限または寿命に達したロックは,それをロックしようとする次のWithLockによってアンロックされる.ExpirationDateは有効期限の絶対日付/時間を与える.PersistenceTimeは相対的な時間を与える.
  • WithLock[var,expr]は並列サブカーネル間のロックに共有変数を使う.これはCriticalSection[var,expr]に等しい.
  • 異なるコンピュータで使用される際,ロックファイルはWithLockが実行されているすべてのコンピュータが使用可能な共有ファイルシステムになければならない.

例題

すべて開くすべて閉じる

  (2)

多くの同時プロセスでファイルにアクセスしようとする:

同じディレクトリ内のロックファイルで同時アクセスを阻止する:

いくつかの並列プロセスを使って同じファイルに同時に書き込もうとする:

データは,プロセス間の干渉なしに(非決定論的順序で)書き込まれた:

ファイルに0を書き込むことでそのファイルを初期化する:

ファイルを読み,ファイルに更新された値を書き込むことを同時に行う:

すべてのアクセスが事実上直列化された:

保護されていない同時アクセスは,互いの値を上書きし,部分的な値を読み出してしまうかもしれない:

スコープ  (3)

ファイルのロック  (1)

ロックファイルを使って同時の更新操作を直列化する:

局所シンボルによるロック  (1)

局所シンボルをロックとして使う:

共有変数によるロック  (1)

並列計算で共有シンボルをロックとして使う:

ファルを書き込む最終プロセスが勝つ.以前の値はきれいに上書きされる:

オプション  (3)

ExpirationDate  (1)

ロック過程がロックを解放できなくなるのを防ぐために,ロックには有効期限が設定できる:

解放されていないロックには識別情報が含まれる:

ロックが期限切れになると,次にこれを使用するWithLockがロックを解除する:

PersistenceTime  (1)

ロック過程がロックを解放できなくなるのを防ぐために,ロックに有効期限が設定できる:

解放されていないロックには識別情報が含まれる:

ロック期限切れになると,次にこれを使用するWithLockがロックを解除する:

TimeConstraint  (1)

ロックされているとWithLockは永遠に待つので,放棄する必要がある:

有限のタイムアウト値を与えてロックが使用可能になるまでの時間を制限する:

特性と関係  (2)

WithLockで共有されている値を使うことはCriticalSectionに等しい:

局所シンボルの更新操作は同時並行性から自動的に保護される:

考えられる問題  (4)

ロックとし使用するファイルが既存の場合はロックがハングする:

この評価は放棄されるまで戻らない:

ロックには常に存在していないファイルを使う:

ロックとして使われる局所ファイルに値がある場合はロックがハングする:

この評価は放棄されるまで戻らない:

ロックには常に存在していない局所シンボルを使う:

すべてのファイルシステムが局所シンボルのロックについての必要な操作をサポートする訳ではない:

ファイルのロックはより多くの場合にサポートされている:

ローカルマシンと1つのリモートマシンで並列カーネルを起動する:

ローカルのファイルシステムで作成されたファイルとロックファイルは,リモートマシンでは使えないかもしれない:

すべての並列サブカーネル上のfileに同時に書き込む:

このファイルでは,ローカルカーネルからの結果しか使用できない:

リモートマシンからの結果は,そのマシンにローカルなファイルに書き込まれている:

共有ファイルシステムでんファイルとロックファイルを使う:

すべての並列サブカーネル上のfileに同時に書き込む:

こうすると,すべての結果が同じファイルに書き込まれる:

Wolfram Research (2021), WithLock, Wolfram言語関数, https://reference.wolfram.com/language/ref/WithLock.html.

テキスト

Wolfram Research (2021), WithLock, Wolfram言語関数, https://reference.wolfram.com/language/ref/WithLock.html.

CMS

Wolfram Language. 2021. "WithLock." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/WithLock.html.

APA

Wolfram Language. (2021). WithLock. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/WithLock.html

BibTeX

@misc{reference.wolfram_2024_withlock, author="Wolfram Research", title="{WithLock}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/WithLock.html}", note=[Accessed: 18-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_withlock, organization={Wolfram Research}, title={WithLock}, year={2021}, url={https://reference.wolfram.com/language/ref/WithLock.html}, note=[Accessed: 18-November-2024 ]}