高竞争环境下的锁效率问题?

问题描述 投票:0回答:1

“对于高级别的争用,依赖于局部旋转(例如 MCS)或分层方法(例如 AHMCS)的锁定算法非常适合(请参阅第 2.1.2 节)。轻型锁定算法(例如 Spinlock)和必须尽可能避免使用停车等待策略的锁定算法。” ——摘自小纸片;

为什么在高竞争情况下,具有长锁定路径的锁定算法(例如 MCS 锁)比轻量级锁(例如自旋锁)更高效?

我从一些论文中了解到,自旋锁在高争用情况下效率较低,因为缓存行故障导致巨大的流量开销,那么为什么具有较长锁定路径(MCS、二级锁定等)的锁定算法效率更高?难道只是因为 MCS 锁定本地变量地址来旋转?为什么在高争用情况下没有停车策略?

c locking
1个回答
0
投票

这不是为了“更有效率”,而是为了不那么糟糕。如果有 100 个线程在同一个锁上旋转,它们将浪费大量 CPU 时间,而这些时间本可以由已经持有锁的线程更好地使用。

就像你说的,如果你几乎总是在第一次尝试时就获得锁,那么自旋锁是好的 - 低争用。

当有很多很多线程时,它们进入睡眠状态会更有效率,因为无论如何它们可能需要等待很长时间。通过睡眠,它们将 CPU 资源留给那些可以做一些生产性工作的线程。

© www.soinside.com 2019 - 2024. All rights reserved.