1
我有一个创建多个线程的程序,它们中的每一个都试图在不同位置(偏移量)的文件中写入100个字节。 第一个线程写入从0开始的100个字节,从100开始的第二个100个字节,从300开始的第三个100字节等等 如果线程按此顺序执行,则一直运行正常,我不需要fseek。但对于实时并发性,如果我将第一个线程“睡眠(2)”放置2秒,请等到所有其他线程完成,然后使用fseek将文件光标移到文件的开头,这种情况不会发生。 我使用互斥锁来处理并发。 代码示例:如何强制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);
问题解决了,非常感谢您的时间。 – NiCU