0

私のプロジェクトでは、複数のスレッドからファイルの読み取りと書き込みを行っているため、ファイル ロックを実装する必要があります。試してみfcntl()ましたが、関数はスレッド間ではなくプロセス間のロックでのみ機能するようです。そのため、別の解決策を探しています。私が思いついた解決策 (これはおそらく最善ではありません) は、ファイルの各レコードにバイトを入れて、レコードがロックされているかどうかを示すことです。その後、ビジー ループを使用してバイトを読み取って確認できます。

それで、私は2つの質問があります。まず、ファイル領域のロックを実装する最も効率的な方法は何ですか? 次に、ビジー ループ アプローチを使用する場合、グランド セントラル ディスパッチで最適化するにはどうすればよいでしょうか。に送信されたブロックですべてのビジー ループを発生させることができると考えていましたdispatch_sync()。しかし、それが効率的に機能するかどうかはわかりません。

ありがとう。

4

1 に答える 1

1

Dispatch Semaphoreはどうですか?Dispatch Semaphore を使用して、排他的にリソースにアクセスできます。たとえば、ファイル領域のディスパッチ セマフォを作成します。

for (int i = 0; i < regions; ++i)
    sema_[i] = dispatch_semaphore_create(1);

そして、wait と signal でリソースにアクセスします。

dispatch_semaphore_wait(sema_[region], DISPATCH_TIME_FOREVER);
/* access the region */
dispatch_semaphore_signal(sema_[region]);
于 2011-07-19T08:02:44.103 に答える