SMP linux中的互斥锁所有者

时间:2012-09-24 19:04:36

标签: linux linux-kernel mutex semantics smp

在互斥锁的内核实现中,只有当它是SMP构建时,线程所有者字段才存在。我可以理解,在良好和干净的代码下,线程将仅在获取成功时调用release,因此我们可以通过不跟踪线程来节省一些缓存和cpu周期。但那么为什么SMP需要呢?是因为在SMP中,互斥是混合和旋转,而线程所有者是在另一个cpu上并且需要这个字段作为参考,还是有更多的原因呢?

1 个答案:

答案 0 :(得分:1)

老实说,我现在还不记得linux内核互斥锁实现,但我发现至少有三个理由将mutex所有者直接存储在数据结构中:

  1. 用于调试。从内核崩溃转储中检测所有者很容易
  2. 对于运行时断言。很容易发现获取已经获得的互斥锁的尝试。
  3. 用于实现优先级继承协议或解决优先级倒置问题的任何其他机制:http://en.wikipedia.org/wiki/Priority_inversion