2

在设备驱动程序的情况下,任何人都可以解释自旋锁的确切用法。我很困惑,因为在我看到自旋锁的许多中断处理程序例程中。由于自旋锁正忙于等待。它可能会延迟其他中断。如果可能的话,请列出我们可以使用自旋锁的设备驱动程序的一些场景

我是这个领域的新手。你的帮助对我有一些初步的推动作用。

4

1 回答 1

4

自旋锁用于无法将量子分配给调度程序的高 Irql 场景。

因此,例如,当您想要锁定某些数据结构(在中断之外)时,您将获得一个互斥锁。当其他人拥有互斥锁时,您的线程将被放入调度程序中的“等待”列表中,直到互斥锁被释放。然后它接收互斥锁的所有权,并且所有其他访问它的线程在尝试获取互斥锁时都将进入睡眠状态。

当你处于中断状态时,你不能这样做。您既没有线程上下文,也不应该“无限期地”推迟此中断。但有时,您确实需要访问中断内的共享数据。当系统中存在多个 CPU 时,可以同时运行多个中断和线程。所以你必须保护工作队列、共享对象等,以免它们被破坏。为此,您使用自旋锁。因为策略是在自旋锁保护部分内做尽可能少的事情,所以您可以期望在锁本身上旋转几个周期,直到它被所有者释放是没有问题的。

因此,从中可以看出,当您从中断访问共享数据时,您必须使用自旋锁,因为没有其他可以使用的原语。

如前所述,始终只在非常短的时间内持有自旋锁。

于 2010-11-09T17:49:14.793 回答