在互斥锁的内核实现中,线程所有者字段仅在它是 SMP 构建时才存在。我可以理解,在良好且干净的代码下,只有在获取成功时,线程才会调用 release,因此我们可以通过不跟踪线程来节省一些缓存和 cpu 周期。但是为什么 SMP 需要它呢?是因为在 SMP 中,互斥体是混合的并且在线程所有者在另一个 cpu 上时旋转并且需要此字段作为参考,还是背后有更多原因?
问问题
941 次
1 回答
1
老实说,我现在不记得 linux 内核互斥锁的实现了,但我看到至少三个原因将互斥锁所有者直接存储在数据结构中:
- 用于调试。从内核崩溃转储中很容易检测到所有者
- 对于运行时断言。检测获取已获取的互斥锁的尝试变得非常容易。
- 对于优先级继承协议或解决优先级反转问题的任何其他机制的实现:http ://en.wikipedia.org/wiki/Priority_inversion
于 2012-09-24T19:46:14.763 回答