コードスニペット:
ofstream log;
log.open("log.txt",ios::out);
Thread threads[2];
...both threads write to the file
log.close()
1 つのスレッドがファイルに書き込むときにファイルをロックする既存の機能。2 つのスレッドが同時に書き込みを行うことはありません。ありがとう。
コードスニペット:
ofstream log;
log.open("log.txt",ios::out);
Thread threads[2];
...both threads write to the file
log.close()
1 つのスレッドがファイルに書き込むときにファイルをロックする既存の機能。2 つのスレッドが同時に書き込みを行うことはありません。ありがとう。
シャンが言ったように
pwrite
、同じアクションを実行しますがwrite
、ファイルポインターを変更せずにファイル内の指定された位置に書き込むため、スレッドで安全です。
詳細については、man pwrite(2) を参照してください。
int fd = open('some_file',O_WRONLY);
/* in threads */
n = pwrite(fd, write_buffer, sizeof_buffer, file_offset);
あなたの場合、書き込み前にロックしてオフセット (ファイル内の場所) を追跡し、ロックを解除して、競合状態がファイルの既存の部分とすべてを上書きしないようにする必要があります。ファイルへのおよびファイルからのアクションは、同時実行ランドでうまく機能します。
使用できますpwrite()
。マルチスレッドで安全に書き込むことができます。