// 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)
他们都可以在他们中的任何一个人拿走第二个锁之前先锁第一把锁,然后他们就会死锁。