我有一个创建多个线程的程序,每个线程都尝试在不同位置(偏移量)的文件中写入 100 个字节。第一个线程从 0 开始写入 100 个字节,第二个从 100 开始写入 100 个字节,第三个从 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);