为什么互斥体不能返回????????急~~~~~~~~~~~~

taoyi 2005-07-27 09:51:11
代码类似如下结构:

MUTEX m_hMutex;

public void DoWork()
{
m_hMutext = CreateMutex();
WaitFor.....;
// ..........
ReleaseMutex(m_hMutex);
}

但在运行的过程中发现有些时候ReleaseMutex并没有将其释放,而下一个线程就怎么也进不了代码段了,老是在那里Wait,郁闷死啦~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

高人帮忙~~~~~~~~~~~~~~~~
...全文
129 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
needways 2005-07-27
  • 打赏
  • 举报
回复
要看你的 DoWork 执行了几次,如果是每个线程中都执行的话,那 DoWork 就有问题了。
你可以将 m_hMutex = CreateMutex() 放到其他地方(比如说在应用程序启动后就创建好)。

int WinMain(...)
{
...
m_hMutex = CreateMutex();
...
}

void DoWork()
{
WaitForSingleObject(m_hMutex);
...
ReleaseMutex(m_hMutex);
}
goodboyws 2005-07-27
  • 打赏
  • 举报
回复
也许是别的什么地方先产生阻塞呢,根本没到ReleaseMutex那一步呢
taoyi 2005-07-27
  • 打赏
  • 举报
回复
to ForTopLevel: m_hMutex是全局的,并且只有一个地方Create.
to happyparrot: 肯定是执行了的,因为我是写在__finally块里的.
to DentistryDoctor:每次DoWork是就创建一次?,再Release一次,本身就有问题?

为啥本身就有问题呢?望指点~~
DentistryDoctor 2005-07-27
  • 打赏
  • 举报
回复
每次DoWork是就创建一次?,再Release一次,本身就有问题?

在初始化时创建,在反初始化的时候Release?

如果是进程内的话,应该使用临界区,这样可以获得更好的性能。
快乐鹦鹉 2005-07-27
  • 打赏
  • 举报
回复
ReleaseMutex(m_hMutex);
--在此行加断点,看看是否执行到了。另外看看句柄是否正确
ForTopLevel 2005-07-27
  • 打赏
  • 举报
回复
m_hMutext = CreateMutex()在函数外写,如果是多线程共享的话,写成全局的。
DentistryDoctor 2005-07-27
  • 打赏
  • 举报
回复
考虑使用CMutex+CSingleLock

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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