有个这样的问题
程序是这样的
EnterCriticalSection(hCritical1);
.....
 for ();//found Index
  EnterCriticalSection(Index.hCritical2);
...
LeaveCriticalSection(hCritical1);
....
LeaveCriticalSection(Index.hCritical2);
这样程序是没错,但用一下就整个线程就锁了如果变成这样
EnterCriticalSection(hCritical1);
.....
...//found index 
....
LeaveCriticalSection(hCritical1);  EnterCriticalSection(index.hCritical2);
   。。
  LeaveCriticalSection(index.hCritical2);
这样出来
Index 就有可能变掉了
程序就挂了
请问老大们  我应该用什么方法才行啊

解决方案 »

  1.   

    翻书找了一下
    像这种问题叫做“死亡拥抱”;
    只能用Mutex
    但Mutex太慢了
      

  2.   

    你的临界区嵌套做成这样会不会可以避免死锁呢?
    EnterCriticalSection(hCritical1);
    .....
    for ();//found Index
    EnterCriticalSection(Index.hCritical2);
    .......
    LeaveCriticalSection(Index.hCritical2);
    LeaveCriticalSection(hCritical1);
      

  3.   

    clasj
    你说的方法是可行的
    我想可以用"Semaphores"来完成
    但也太慢了wjowner(Jerry.W)
    进了hCritical1就不需要进hCritical2了
    关建是出来之后
    别的线程就有可能把index给换了
      

  4.   

    其实是可以整个函数进hCritical1
    就没什么问题
    可就是速度上不来
      

  5.   

    Lock1:TCriticalSection;
    ...
    Lock1.Acquire;
    try
    保护区
    finally
    Lock1.Release
    end;
    其他线程也用全局Lock1做保护