[英]When boost library “interprocess” defines a named_mutex do those named_mutexes work properly between different processes, or only with threads?
[英]DIfferent HANDLE results for Named Mutexes
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
错误
有一个在这里细微的差别:调用不返回的句柄。 该调用返回一个句柄。
只要检索到的句柄允许您执行所要求的操作(即安全权限),就可以了。 只是不要对未明确记录的手柄做出任何假设。
另外,由于已命名,为什么还要有静态的HANDLE? 这是程序的一部分,该程序可以将来自不同进程的数千个事务归档到同一数据库中。
static
引用您的变量。 它不是句柄本身的属性。
我发现我的静态HANDLE更改为其他句柄并导致WAIT_FAILED错误
只要您不关闭句柄(可能在需要的地方正确关闭DuplicateHandle()
,就不会发生这种情况。 如果您使用CloseHandle()
,它当然将无效。 如果在程序的各个部分之间传递句柄,则出于相同的原因,应谨慎使用该句柄的所有权。 而且,如果在进程之间传递句柄,则必须调用DuplicateHandle()
。
除此之外,这非常简单。 手柄不涉及黑魔法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.