两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION



在我目前的工作中,我们有几个线程同时运行, 通过其中一个线程,我们打开了一个文件:

std::ofstream fs;    
fs.open(filename.c_str(), std::ofstream::out);
if( fs.is_open() ){
// do some file operation and write
fs.close();
}

而单独的线程也访问相同的文件:

HANDLE handle = CreateFileW(filename.c_str(), GENERIC_READ,0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

它失败并给出错误ERROR_SHARING_VIOLATION。

我知道,我们可以使用同步机制来克服这个问题,

但是我们可以在打开文件时使用文件共享机制来处理它吗,因为一个线程使用流 API 打开文件,而另一个线程使用 createFile。

任何输入都是可观的。

您的CreateFile()调用将dwShareMode参数设置为 0,因此它正在尝试打开文件进行独占访问,如果文件已打开,这将失败。

您需要指定与ofstream打开文件的方式兼容的共享权限,例如:

HANDLE handle = CreateFileW(filename.c_str(), GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

最新更新