代码类似如下结构:MUTEX m_hMutex;public void DoWork()
{
   m_hMutext = CreateMutex();
   WaitFor.....;
   // ..........
   ReleaseMutex(m_hMutex);
}但在运行的过程中发现有些时候ReleaseMutex并没有将其释放,而下一个线程就怎么也进不了代码段了,老是在那里Wait,郁闷死啦~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~高人帮忙~~~~~~~~~~~~~~~~

解决方案 »

  1.   

    m_hMutext = CreateMutex()在函数外写,如果是多线程共享的话,写成全局的。
      

  2.   

    ReleaseMutex(m_hMutex);
    --在此行加断点,看看是否执行到了。另外看看句柄是否正确
      

  3.   

    每次DoWork是就创建一次?,再Release一次,本身就有问题?在初始化时创建,在反初始化的时候Release?如果是进程内的话,应该使用临界区,这样可以获得更好的性能。
      

  4.   

    to ForTopLevel: m_hMutex是全局的,并且只有一个地方Create.
    to  happyparrot: 肯定是执行了的,因为我是写在__finally块里的.
    to  DentistryDoctor:每次DoWork是就创建一次?,再Release一次,本身就有问题?为啥本身就有问题呢?望指点~~
      

  5.   

    也许是别的什么地方先产生阻塞呢,根本没到ReleaseMutex那一步呢
      

  6.   

    要看你的 DoWork 执行了几次,如果是每个线程中都执行的话,那 DoWork 就有问题了。
    你可以将 m_hMutex = CreateMutex() 放到其他地方(比如说在应用程序启动后就创建好)。int WinMain(...)
    {
       ...
       m_hMutex = CreateMutex();
       ...
    }void DoWork()
    {
       WaitForSingleObject(m_hMutex);
       ...
       ReleaseMutex(m_hMutex);
    }