ReleaseMutex在未设置错误代码的情况下失败

时间:2016-10-20 14:44:10

标签: c++ windows

我有几个应用程序,多个线程试图在执行期间的某个时间访问相同的互斥锁。我注意到的是,有时拥有互斥锁然后尝试释放它的线程无法这样做(ReleaseMutex返回0)但没有设置错误代码。此问题似乎是随机发生的,并且在我的应用程序执行期间会多次发生。即使ReleaseMutex失败,似乎互斥体也会被释放,因为我的应用程序继续正常运行。

有没有人知道什么可能导致ReleaseMutex失败而没有设置错误代码?我确保在ReleaseMutex无法确保没有其他方法更改错误代码后直接调用GetLastError。

编辑:添加了我用来释放互斥锁的代码,然后在失败时获取错误代码。

// Release
mutexResult = ReleaseMutex(dataMutex);
if(!mutexResult)
{
    char text[200];
    DWORD err = GetLastError();
    sprintf(text, "Release mutex error = %d!\n", err);
    TRACE(text);
}

我可以补充一点,上面的代码包含在首先获取互斥锁的函数中,然后在再次释放互斥锁之前对受保护的数据进行一些处理。这个函数在每个进程中从多个地方调用,但每次我遇到这个奇怪的问题时,它都是导致它的同一个函数(我的一个源文件中的特定行)。所有其他调用它似乎工作正常。

0 个答案:

没有答案