代码之家  ›  专栏  ›  技术社区  ›  Chankey Pathak

具有潜在死锁的代码

  •  0
  • Chankey Pathak  · 技术社区  · 14 年前
    // down = acquire the resource
    // up = release the resource
    
    typedef int semaphore;
      semaphore resource_1;
      semaphore resource_2;
    
    
     void process_A(void) {
        down(&resource_1);
        down(&resource_2);
        use_both_resources();
        up(&resource_2);
        up(&resource_1);
     }
    
     void process_B(void) {
        down(&resource_2);
        down(&resource_1);
        use_both_resources();
        up(&resource_1);
        up(&resource_2);
     }
    

    为什么这段代码会导致死锁?

    如果我们改变 process_B 如果两个进程都按以下顺序请求资源:

     void process_B(void) {
        down(&resource_1);
        down(&resource_2);
        use_both_resources();
        up(&resource_2);
        up(&resource_1);
     }
    

    那么就没有死锁了。

    为什么呢?

    2 回复  |  直到 14 年前
        1
  •  3
  •   pablosaraiva    14 年前

        2
  •  0
  •   Peter G.    14 年前