为什么必须在任何不可睡眠的锁之前采取巨锁

时间:2017-10-15 18:03:12

标签: synchronization interrupt freebsd smp

我试图了解第三点的原因 - 最重要的是必须条件来自以下链接:

https://www.freebsd.org/cgi/man.cgi?locking(9)

Giant是一种特殊的互斥锁,用于保护尚未存在的数据结构      有自己的锁。因为它提供类似于旧的spl(9)的语义      界面,巨人有特色:

Matrix 1

+---+---+---+---+
|  1|  2|  0|  0|
+---+---+---+---+
|  0|  3|  4|  0|
+---+---+---+---+
|  0|  0|  5|  6|
+---+---+---+---+

1 个答案:

答案 0 :(得分:1)

John Baldwin在他的BSDcon paper中为此规则提供了更详细的解释:

  

获取巨人时不允许持有任何锁定。这个   确保始终可以安全地获取其他锁,无论是否   巨人被举行。这反过来允许拥有自己的子系统   在没有巨人被占领的情况下直接调用锁,并被调用   其他需要巨人的子系统。