【发布时间】:2017-06-24 12:03:28
【问题描述】:
我的 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。只有当第一个进程被杀死时,才会写入第二个进程数据。我哪里错了?
注意:这个问题只发生在少数机器上。
【问题讨论】:
-
您是否从示例中发出错误处理?注意
CreateMutex可以返回NULL。 -
另外,
WaitForSingleObject也可以返回不同的结果。您可以查看示例 here,了解如何使用带有CreateMutex和WaitForSingleObject的互斥锁 -
虽然,我可能会推荐使用
lock_guard。 -
@Default lock_guard 在进程间工作?刚才检查了一下,“是的”我在 CreateMutex 中得到了 NULL。但是 GetLastError 没有返回任何错误。
-
@Default 抱歉之前的评论。 GetLastError 返回 ACCESS_DENIED
标签: c++ multithreading c++11 mutex