我正在尝试使用多个线程(pthread)对文件进行随机写入(基准测试)。看起来如果我注释掉mutex lock
创建的文件大小小于实际,就好像一些写入丢失了(总是在块大小的某个倍数中)。但是,如果我保留互斥锁,它总是精确的大小。
我的代码是否在其他地方有问题并且真的不需要互斥锁(正如@evan 所建议的那样)或者这里需要互斥锁
void *DiskWorker(void *threadarg) {
FILE *theFile = fopen(fileToWrite, "a+");
....
for (long i = 0; i < noOfWrites; ++i) {
//pthread_mutex_lock (&mutexsum);
// For Random access
fseek ( theFile , randomArray[i] * chunkSize , SEEK_SET );
fputs ( data , theFile );
//Or for sequential access (in this case above 2 lines would not be here)
fprintf(theFile, "%s", data);
//sequential access end
fflush (theFile);
//pthread_mutex_unlock(&mutexsum);
}
.....
}