0

少なくとも Windows と Mac OS X では、マルチスレッドが同じファイルに同時に書き込むためのクロスプラットフォーム ソリューションが必要です。異なるスレッドが異なるファイル領域に書き込みます。

ファイルは少し大きいです。数GBまたは数百MBの場合があります。したがって、MMF は適切ではありません。

QFile はクロスプラットフォームのオーバーラップです。QFile ドキュメントを検索しましたが、共有書き込みオプションはありません。

Windows では、これは FILE_SHARE_WRITE オプションを使用して CreateFile で実行できます。Mac OS X はどうですか?

Qt はこれをサポートしていますか、それとも自分でカプセル化する必要がありますか? Mac OS X でこれを行う方法は?

4

2 に答える 2

0

Mac OS X では、複数のプロセスまたはスレッドがファイルを開き、ファイル内に書き込むことに対する障壁はありません。このようなオプトイン協調ロック方式は、「アドバイザリ ロック」と呼ばれます。たとえば、flock()ファイル全体をロックするには、バイト範囲のロックにはfcntl()を使用します。

の実装方法によってQFileは、このままでも問題なくマルチスレッドの書き込みが可能になる場合があります。それを禁止するには、特別な措置を講じる必要があります。

もちろん、スレッドまたはプロセスが何らかの方法で調整されない場合、互いのデータを上書きして破損するリスクがあります。

于 2012-04-11T10:31:51.943 に答える
0

( documentationQFile )で使用できます。QReadWriteLock

于 2012-04-11T08:38:55.433 に答える