with-local-file-lock (マクロ)
パッケージ: CURL.LANGUAGE.COMPILER

異なるプロセス間で同期を行うために使用するファイル ロック機能を提供します。これにより、一度に 1 プロセスのみが、ファイルまたは他の共有リソースに書き込みや読み込みを行えるようになります。

説明

これを使用する別のプロセスは、base-url の値を使用しなければなりません。この値は、他のプロセスと同期を取るため、ファイルシステムの同じ場所をポイントしています。
この呼び出しは、カッコ内のコードが終了するまでローカル ファイルをロック状態に保ち、コードが終了した時点、または with-local-file-lock を過ぎて例外がスローされたとき、ロックを解除します。
この呼び出しは、ロックを取得できないとき、IOException のサブクラスをスローします。
ファイルをロック状態にするのは短時間の間だけにする必要があります。with-local-file-lockbody の内部でイベント ループに入ることはできません。これには、Dialog を表示するものや、event-loopdispatch-events を呼び出すものがあります。

構文

"with-local-file-lock" マクロは次の構文を使用します。

{with-local-file-lock base-url [, timeout = time-value] [, old-lock-override-timeout = time-value] do body }
base-url:
ロック ファイルのファイル名の一部として使用される基本 Urlbase-url は、アプリケーションによって使用されるファイルの Url にすることができます。
プロセスは base-url に対する書き込みを許可されている必要があります。たとえば、プロセスに特権を与えることができます。または、base-url を、choose-file から返された PrivilegedUrl にすることも可能です。あるいは、base-url は、呼び出された request-local-data-permission 付きのサブツリー "curl://local-data" とすることも可能です。
また、ユーザーはオペレーティング システムに対し、base-url を含むディレクトリへの書き込みアクセスを与える必要があります。
ロック ファイルは、base-url に基づく名前を持つファイルです。ただし、"." がファイル名の前に付加され、拡張子 ".lock" で終わります。
old-lock-override-timeout:
ロックを取得してからロックがオーバーライドされるまでの時間を示す Time
コンピュータのリブートやリモート コンピュータでのアプリケーションの異常終了後、古いローカル ファイルのロックが残ることがあります。このような古いロックは、異常終了またはリブートを確認した後、オーバーライドする必要があります。この値は、現在実行中のプロセスだけでなく、コンピュータ上にある、プロセスによって作成されたロックのオーバーライドを決定するためにのみ使用されます。
この値は、ロックが通常保持される最長時間より数倍長くする必要があります。また、この値は少なくとも 2s にする必要があります。
既定値は 5 * 60s または 5 分です。
timeout: メソッドが持続してロックの取得を試みる時間を示す Time。この時間内にロックを取得できない場合は、LocalFileLockedException がスローされます。

既定値は infinity * 1s で、タイムアウトしないことを意味します。

注意事項

同じロック ファイルを再帰的にロックすることはできません。最も外側のファイル ロックのみ可能です。