これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド with-lock-ex です。
プログラム:
NAME
with-lock-ex - ファイルロッカー
SYNOPSIS
ロック付き元 -w|-q|-f ロックファイル command 引数 ...
DESCRIPTION
with-lock-ex は書き込み用にロックファイルを開いてロックし、残りのファイルをフィードします。
その議論に対する exec(2); そのプロセスが終了すると、fd が閉じられ、ファイルが
カーネルによって自動的にロックが解除されます。
ファイルが存在しない場合は、権限付きでファイルが作成されます。 rw ユーザークラスごとに
umaskが持っているもの w.
OPTIONS
-w ロックが使用可能になるまで待ちます。
-f ロックを取得できない場合は失敗します (標準エラー出力にメッセージを出力し、255 で終了します)。
別のプロセスがそれを持っているため、すぐに実行されます。
-q もし
別のプロセスがロックを持っているため、すぐにロックを取得できません。
ステーリング ロック
使用されるロック プロトコルは、古いロックの影響を受けません。 ロックできない場合
ロックを取得した場合は、XNUMX つ以上の実行中のプロセスが現在ロックを保持している必要があります。 ロックが必要な場合
解放するにはそれらのプロセスを強制終了する必要があります。
いかなる状況でも、「古いロック クリーナー」 cron ジョブなどを開始してはなりません。
非常に多くのロックが存在するシステムでは、古いロックファイルが cron から削除される可能性がありますが、
ロックファイルが削除される前に各ロックが取得された場合のみ。
ロック付き元 -q ロックファイル rm ロックファイル
行き詰まり
デッドロック検出はありません。 複数のロックを持つシステムでは、ロック階層は次のようになります。
ロックのペアごとに次のように確立されます。 A および B プロセスがロックする可能性があるもの
同時に、どちらか A>B or B>A ここで、関係 > は推移的で非循環的です。
次に、任意の XNUMX つのロックについて、 X および Y X>Y 取得することは禁止されています X 保持しながら Y.
代わりに、取得してください X 最初に、またはリリース Y (再)取得する前に X および Y その順序で。
(デッドロックを回避するにはさらに複雑な方法がありますが、ロック階層は簡単に回避できます。
理解して実行します。 ニーズを満たさない場合は、文献を参照してください。)
ロック プロトコル
で使用されるロック プロトコル ロック付き元 次のとおりです。
ロックは、fcntl 排他ロックを保持するプロセス (またはプロセスのグループ) によって保持されています。
指定された名前を持つプレーン ファイルの最初のバイト。 ロックのホルダー
(ロックの所有者のみが) ファイルを削除したり、名前が付けられている i ノードを変更したりできます。
参照し、参照するとすぐにロックの保持を中止します。
ファイルが存在しない場合、どのプロセスでもファイルを作成できます。 ファイルを作成する必要はありません。
実際のデータが含まれています。 確かに、実際にファイルをデータストレージに使用することは非常に危険です。
これにより、信頼性の高い更新のためのほとんどの戦略が無効になるため、推奨されません。 使う
代わりに別のロックファイルを使用してください。
ロックを取得できる機能は、ファイルへの書き込み権限に対応します (もちろん、
ファイルがまだ存在しない場合は、ファイルを作成する権限を与えます)。 ただし、
ファイルに対する読み取り権限のみがロックの取得をまったく防ぐことができません。 したがって
通常、ロックファイルは誰でも読み取り可能であってはなりません。
プロセス(のグループ)がロックを取得したい場合、ファイルを開く必要があります(
O_CREATE) でロックします fcntl(2) F_RWLCK、 手術 F_SETLK or F_SETLKW。 これなら
成功した場合は、そのファイル記述子とそのパスによるファイルを fstat する必要があります。 もし
デバイスと i ノードが一致するとロックが取得され、ロックが取得されるまで取得されたままになります。
プロセスのグループは、名前が参照するファイルを変更、ファイルを削除、または解放します
fcntl ロック。 そうでない場合は、別のプロセスがロックを取得し、
その間にファイルを作成します。 ファイル記述子を閉じて、再度開始する必要があります。 ロック付き
ex はこの仕様に従います。
注意してください 群れ(2) は別の種類のロックです。 fcntlとします。 ロック付き元 使用されます fcntl.
onworks.net サービスを使用してオンラインで with-lock-ex を使用する