c++ - 来自两个进程的同一文件写入失败

标签 c++ multithreading c++11 mutex

我的 Dll 将数据写入文件“Sample.txt”。

如果Dll被两个进程加载,那么Sample.txt将被两个进程写入。

在那种情况下,只有先写入文件的进程才会继续写入文件。我在 Sample.txt 中看不到第二个进程的数据。我使用 Mutex 在进程之间进行同步。

我的代码如下,

HANDLE MLock = CreateMutex(NULL,FALSE,L"MLock");
WaitForSingleObject(MLock,INFINITE);
ofstream fp;
fp.open("Sample.txt",ios::app);
fp <<  GetCurrentProcessID();
fp.close();
ReleaseMutex(MLock);

我只能在 Sample.txt 中看到第一个进程的 ID。只有当第一个进程被杀死时,第二个进程数据才会被写入。我哪里错了?

注意:这个问题只发生在少数机器上。

最佳答案

试试这个:

HANDLE MLock = CreateMutex(NULL,FALSE,L"MLock");
if (NULL == MLock)
      MLock = OpenMutex(MUTEX_ALL_ACCESS,FALSE,L"MLock");

if (NULL == MLock){
   // error return 
}

WaitForSingleObject(MLock,INFINITE);
//...

关于c++ - 来自两个进程的同一文件写入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42086549/

相关文章:

c++ - 从哪里获得简单的开源 adpcm C\C++ 编码器库?

java - JNI 代码中的 UnsatisfiedLinkError

c# - 如何在不同线程上创建用户控件?

python - GUI 中具有长进程的选项卡都调用同一个实例? [编辑-QThread 和 QObject 用于将对象传递到 GUI]

c++ - 使用指针 vector 实现移动构造函数

C++ getline();下面显示一个

c++ - 制作 shared_ptr 的拷贝时会发生什么?

c++ - 从 C++ 中的二维 vector 中的特定索引获取值

c++ - 将指针传递给成员函数可以在 MinGW-w64 中编译,但不能在 gcc 中编译

c - 如何并行 mmap 以加快文件读取速度?