【发布时间】:2011-02-27 08:12:23
【问题描述】:
MSDN CreatMutex() 文档 (http://msdn.microsoft.com/en-us/library/ms682411%28VS.85%29.aspx) 在结尾处包含以下注释:
两个或多个进程可以调用 CreateMutex 来创建同名互斥锁。第一个进程实际上创建了互斥锁,具有足够访问权限的后续进程只需打开现有互斥锁的句柄。这使得多个进程能够获得同一个互斥锁的句柄,同时减轻了用户确保创建进程首先启动的责任。使用此技术时,应将 bInitialOwner 标志设置为 FALSE;否则,可能很难确定哪个进程具有初始所有权。
有人可以解释使用 bInitialOwner = TRUE 的问题吗?
在同一文档的前面,它建议调用 GetLastError() 将允许您确定调用 CreateMutex() 是否创建了互斥锁或只是返回了现有互斥锁的新句柄:
返回值
如果函数成功,则返回值是新创建的互斥对象的句柄。
如果函数失败,返回值为NULL。要获取扩展的错误信息,请调用 GetLastError。
如果互斥体是命名互斥体并且对象在此函数调用之前存在,则返回值是现有对象的句柄,GetLastError 返回 ERROR_ALREADY_EXISTS,忽略 bInitialOwner,并且不授予调用线程所有权。但是,如果调用者的访问权限有限,则函数将失败并返回 ERROR_ACCESS_DENIED,调用者应使用 OpenMutex 函数。
【问题讨论】:
标签: winapi