我做了一个多线程程序,有三个线程
用了CreateMutex同步,
分别在工程单元中:
    program Gateway;uses
  Forms,Windows,
  Main in 'Main.pas' {MainFrm},
  dlltype in 'dlltype.pas',
  addrList in 'addrList.pas' {AList};{$R *.res}begin  hMutex := CreateMutex( nil, FALSE, nil );
  OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
  Application.Initialize;
  Application.CreateForm(TMainFrm, MainFrm);
  Application.CreateForm(TAList, AList);
  Application.Run;
  CloseHandle( hMutex );
end;然后在各个线程单元用:
     ..............................
    WaitForSingleObject(hMutex, INFINITE);
     ......................
     ReleaseMutex(hMutex);
可是程序执行到一般总是有一个线程会死锁,我查了好久,都不知道什么原因,请问各位高手,
我的程序问题出在哪里?

解决方案 »

  1.   


    begin  hMutex := CreateMutex( nil, FALSE, nil );
      OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
      Application.Initialize;
      Application.CreateForm(TMainFrm, MainFrm);
      Application.CreateForm(TAList, AList);
      Application.Run;
      CloseHandle( hMutex );// the main thread create the mutex and it imdiately own the mutex
      ReleaseMutex(hMutex);
    end;
      

  2.   

    begin  hMutex := CreateMutex( nil, FALSE, nil ););// the main thread create the mutex and it imdiately own the mutex  OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
      ReleaseMutex(hMutex);
      Application.Initialize;
      Application.CreateForm(TMainFrm, MainFrm);
      Application.CreateForm(TAList, AList);
      Application.Run;
    CloseHandle( hMutex );
    end;
      

  3.   

    begin  hMutex := CreateMutex( nil, FALSE, nil );
      //OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
      Application.Initialize;
      Application.CreateForm(TMainFrm, MainFrm);
      Application.CreateForm(TAList, AList);
      Application.Run;
      CloseHandle( hMutex );
    end;
    然后在各个线程单元用:
         OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
         ..............................
        WaitForSingleObject(hMutex, INFINITE);
         ......................
         ReleaseMutex(hMutex);