ReleaseMutex错误代码288

hztj2005 2014-08-01 12:33:23
主进程创建互斥读写锁。mymutex1;

然后启动子进程。子进程用OpenMutex打开,返回值非NULL。
写入数据后,用ReleaseMutex(mymutex1),结果
GetLastError()是288

网上查的288 0x0120意图释放不属于叫用者的mutex。

既然OpenMutex打开,返回值非NULL,为什么释放不成功?

谢谢!
...全文
374 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2014-08-01
  • 打赏
  • 举报
回复
CreateMutex的时候,第二个参数传递FALSE
fishion 2014-08-01
  • 打赏
  • 举报
回复
ReleaseMutex一般只能由创建该Mutex的进程执行,你可以在创建子进程后用DuplicateHandle把Mutex生成副本,然后给子进程发送副本的句柄
hztj2005 2014-08-01
  • 打赏
  • 举报
回复
引用 1 楼 xiaohuh421 的回复:
你是Open的, 就不应该release. 只需要CloseHandle即可. 只有Create的进程才有能力release
使用了CloseHandle,不发生错误,但仍然无法使主进程中的waitforsingleobject(mymutex1)收到信息。
xiaohuh421 2014-08-01
  • 打赏
  • 举报
回复
MSDN原文: ReleaseMutex Function: Releases ownership of the specified mutex object. The ReleaseMutex function fails if the calling thread does not own the mutex object. 这只是释放所有权 只有CloseHandle才是释放资源.
hztj2005 2014-08-01
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
你现在Mutex在谁手里,只有owner能够Release
Mutex是主进程创建的。子进程写数据到共享内存后,需要释放控制权,让主进程可以从共享内存读数据。 我在子进程中使用Release释放控制权,发生288错误。
hztj2005 2014-08-01
  • 打赏
  • 举报
回复
引用 1 楼 xiaohuh421 的回复:
你是Open的, 就不应该release. 只需要CloseHandle即可. 只有Create的进程才有能力release
我理解release是释放互斥控制权给其它进程使用。 CloseHandle是彻底删除该mymutex1。 难道我理解错了。子进程CloseHandle不会删除该mymutex1。 那就是每次子进程要使用时,重新Open?
oyljerry 2014-08-01
  • 打赏
  • 举报
回复
你现在Mutex在谁手里,只有owner能够Release
xiaohuh421 2014-08-01
  • 打赏
  • 举报
回复
你是Open的, 就不应该release. 只需要CloseHandle即可. 只有Create的进程才有能力release
zhousitiaoda 2014-08-01
  • 打赏
  • 举报
回复
涨姿势了。。。学习下。。。
hztj2005 2014-08-01
  • 打赏
  • 举报
回复
引用 7 楼 fishion 的回复:
ReleaseMutex一般只能由创建该Mutex的进程执行,你可以在创建子进程后用DuplicateHandle把Mutex生成副本,然后给子进程发送副本的句柄
ReleaseMutex一般只能由创建该Mutex的进程执行,经过试验是正确的。我在子进程中创建,主进程延迟10秒后open,然后主进程中waitfor,直到子进程release,初步成功。 你可以在创建子进程后用DuplicateHandle把Mutex生成副本,然后给子进程发送副本的句柄。 不知DuplicateHandle把Mutex生成副本是否有效。留待探讨。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧