-1
無法瞭解從高爾文第9版第7章死鎖頁326如果可以動態獲取鎖,則強制鎖定順序不能保證鎖死。這是什麼意思?
堂堂一個鎖定順序並不能保證防止死鎖如果鎖可動態獲取採取以下文字。例如,假設我們有一個在兩個賬戶之間轉移資金的功能。爲了防止競爭條件,每個帳戶具有從一個get鎖()函數獲得如在下面的程序中所示的相關聯的互斥鎖:
void transaction(Account from, Account to, double amount)
{
mutex lock1, lock2;
lock1 = get lock(from);
lock2 = get lock(to);
acquire(lock1);
acquire(lock2);
withdraw(from, amount);
deposit(to, amount);
release(lock2);
release(lock1);
}
死鎖是可能的,如果兩個線程同時調用該事務()功能,轉換不同的帳戶。也就是說,一個線程可能調用
transaction(checking account, savings account, 25);
,另一個可能會調用
transaction(savings account, checking account, 50);
任何人可以幫我瞭解這裏的含義是什麼?