|
1
1
打开分机 Richard Hodges 的 answer
理查德已经很好地解释过了,只是说得更清楚了一点:我们这样可以避免死锁(
延迟锁将导致无法立即获取它。这很重要,因为如果他们
做
std::lock ):
旁注:另一个更简单的避免死锁的算法总是先用较低的账号(AN)锁定银行账户。如果一个线程正在等待更高的AN的锁,那么持有它的另一个线程要么已经获得了这两个锁,要么正在等待第二个锁,后者不能是第一个线程之一,因为它必须拥有更高的AN。 对于任意数量的线程来说,这并没有太大的变化,任何持有较低锁的线程都在等待较高的锁(如果持有的话)。如果你画一个有向图,边从a到B如果a在等待B持有的第二个锁,你会得到一个(多)树结构,但你永远不会有循环子结构(这将表明一个死锁)。 |
|
|
2
7
如果我在不锁定的情况下修改银行帐户,其他人可以尝试同时修改它。这是一场比赛,结果将是不确定的行为(通常是损失或神奇地创造了金钱)。
问题是,当锁定不止一个东西时,每个储物柜必须按相同的顺序锁定和解锁,否则我们就会陷入死锁。 如果是银行账户,锁就没有自然的顺序。成千上万的线程可以向各个方向转移资金。
|
|
|
3
0
银行帐户数据结构对每个帐户都有一个锁。
完成交易后,我们需要确保解除锁定。这个代码是用RAII实现的。与
|
|
4
0
没有人
使用
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |