複数のスレッドを作成するプログラムがあり、それぞれが異なる場所 (オフセット) のファイルに 100 バイトを書き込もうとします。最初のスレッドは 0 から始まる 100 バイト、2 番目のスレッドは 100 から始まる 100 バイト、3 番目のスレッドは 300 から始まる 100 バイトなどを書き込みます。スレッドがこの順序で実行される場合、すべて問題なく、fseek は必要ありません。しかし、リアルタイムの並行性のために、最初のスレッドを「sleep(2)」に 2 秒間置き、他のすべてのスレッドが完了するまで待機し、fseek を使用してファイル カーソルをファイルの先頭に移動すると、これは起こりません。並行性を処理するためにミューテックスを使用しました。コードサンプル:
offset=0;//for the first thread
char data[100];
int length; // how many chars are currently in data
FILE * f;
pthread_mutex_lock(&mutexFileWrite);
f = fopen(fileName, "a");
fseek(f,offset, SEEK_SET);
fwrite(data,sizeof(char),length,f);
fclose(f);
pthread_mutex_unlock(&mutexFileWrite);