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


// 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);
 }

这会导致任何潜在的问题吗?感谢您的任何解释!

重要的部分是您是否在不同的线程中以相同的顺序获取锁。

释放顺序不起作用;没有什么能

阻止程序在释放第一个锁后释放第二个锁,(除非你在两者之间使用新锁,但随后你又回到了第一种情况;以正确的顺序使用锁。

如果您有两个函数尝试以不同的顺序获取相同的两个锁,则可以分别抓住一个锁,并永远等待另一个锁释放它们的锁。示例代码:

down(first_lock)
down(second_lock)

与 同时运行

down(second_lock)
down(first_lock)
他们

都可以在他们中的任何一个人拿走第二个锁之前先锁第一把锁,然后他们就会死锁。

相关内容

最新更新