写入在两个进程的同一文件中失败

时间:2017-02-07 09:48:38

标签: 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。只有当第一个进程被杀死时,才会写入第二个进程数据。我哪里错了?

注意:此问题仅在少数计算机中发生。

1 个答案:

答案 0 :(得分:0)

试试这个:

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);
//...