0

ファイルが複数のスレッドによって共有 (読み取りおよび書き込み) されるマルチスレッド プロセスがあります。スレッドが 1 つのファイル セグメントをロックして、他のスレッドがアクセスできないようにする方法はありますか? 試してみfcntl(fd, F_SETLKW, &flock)ましたが、このロックはスレッドではなくプロセスに対してのみ機能します (ロックはプロセス内のすべてのスレッド間で共有されます)。

4

4 に答える 4

2

はい - ただし、同じメカニズムではありません。pthread ミューテックスのようなものを使用し、簿記を自分で追跡する必要があります。

この作業を行う方法の可能な概要

  • ブックキーピング構造を介してプロセスレベルのミューテックスを待機して要求する
    • プロセス内の他のスレッドがそのセグメントを使用しようとしていないことを確認してください
    • ファイル セグメントを使用していることを示す
  • プロセス レベルのミューテックスを解放する

  • プロセスの fnctl ロックを取得します (必要な場合)

  • あなたの書き込みを行います
  • fnctl ロックを解放して、他のプロセスがセグメントを使用できるようにする (必要な場合)

  • プロセス レベルのブックキーピング構造のミューテックスを再度待機します (アトミックに未使用とマークできる場合は必要ない場合があります)。

    • プロセス内でセグメントを未使用としてマークします。
  • プロセス レベルのミューテックスを解放する
于 2012-10-20T23:55:55.070 に答える
0

次の 2 つの方法があります。

  1. Mutex を使用して、同じプロセス内のスレッドでレコードのロックを取得します。ロックが取得されると、ロックを取得しようとするファイルをマッピングするプロセス内の他のスレッドは、ロックが解放されるまでブロックされます。

  2. 共有メモリまたはメモリ マップド ファイルのセマフォとミューテックス。

于 2012-10-20T19:29:42.540 に答える
0

異なるプロセス間でファイル ロックが必要ない場合は、ファイル ロック (POSIX API の最悪の設計部分の 1 つ) を回避し、ミューテックスまたは他の共有メモリ同時実行プリミティブを使用します。

于 2012-10-20T19:02:51.977 に答える