死锁:资源回报的顺序是否有任何潜在的问题?

时间:2016-04-02 13:03:13

标签: deadlock

// 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_A(void) {
    down(&resource_1);
    down(&resource_2);
    use_both_resources();
    up(&resource_1);
    up(&resource_2);
 }

这会导致任何潜在的问题。 谢谢你的解释!

1 个答案:

答案 0 :(得分:0)

重要的是,如果你在不同的线程中以相同的顺序获取锁定。

释放顺序无效;在第一个锁被释放后,没有任何东西阻止程序释放第二个锁(除非你在两个锁之间取得新的锁,但是你在第一个情况下又回来了;以正确的顺序锁定。)

如果你有两个函数试图采用相同的两个锁,在不同的顺序中,它们可以每个获取一个锁,并等待另一个锁释放它们。示例代码:

down(first_lock)
down(second_lock)

同时运行
down(second_lock)
down(first_lock)

他们可以在他们中的任何一个进行第二次锁定之前进行第一次锁定,然后他们就会陷入僵局。