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

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

MUTEX m_hMutex;

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

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

高人帮忙~~~~~~~~~~~~~~~~
...全文
70 点赞 收藏 7
写回复
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
回复 点赞
发动态
发帖子
网络编程
创建于2007-09-28

7880

社区成员

6.4w+

社区内容

VC/MFC 网络编程
社区公告
暂无公告