命名互斥锁的不同HANDLE结果

时间:2014-02-15 23:28:54

标签: c++ multithreading mutex

OpenMutex()始终返回不同的句柄地址是否正常?文档说如果成功则返回HANDLE,否则返回NULL

OpenMutex的每个实例都返回一个不同的句柄......

m_logMutex定义为static HANDLE

    m_logMutex = OpenMutex(SYNCHRONIZE, FALSE, LOGMUTEX);
    if(m_logMutex == NULL) {
        m_logMutex = CreateMutex(NULL, FALSE, LOGMUTEX); 
    }

另外,由于这是名为,为什么甚至会有静态HANDLE?这是程序的一部分,可以将来自不同进程的数千个事务存档到同一个数据库中。我发现我的静态HANDLE被更改为不同的句柄并导致WAIT_FAILED错误

1 个答案:

答案 0 :(得分:1)

这里有一个细微的区别:通话不会返回 句柄。该调用返回 a 句柄。

只要检索到的句柄允许您执行您要求的操作(即安全权限),一切都很好。只是不要假设没有明确记录的句柄。

  

另外,由于这个名字,为什么甚至有一个静态的HANDLE?这是程序的一部分,可以将来自不同进程的数千个事务存档到同一个数据库中。

static指的是你的变量。它不是手柄本身的属性。

  

我发现我的静态HANDLE被更改为不同的句柄并导致WAIT_FAILED错误

只要您不关闭手柄(并且可能在需要的地方DuplicateHandle()),就不会发生这种情况。如果你CloseHandle()它,它当然会变得无效。如果在程序的各个部分之间传递句柄,出于同样的原因,应该小心句柄的所有权。如果您在进程之间传递句柄,则必须调用DuplicateHandle()

除此之外,它非常简单。手柄没有黑魔法。