Kindred Asked: 2018-12-28 08:58:14 +0800 CST2018-12-28 08:58:14 +0800 CST 2018-12-28 08:58:14 +0800 CST Linux 中如何实现自旋锁? 772 我正在考虑如何在 Linux 中为自旋锁实现“防止上下文切换”功能。大图/伪代码是可以接受的,因为我知道它背后的逻辑。 linux spinlock 1 个回答 Voted Best Answer peterh 2018-12-30T17:18:47+08:002018-12-30T17:18:47+08:00 Spinlock 不是 Linux 特性,它是一个非常简单的 CPU 特性,至少在大多数 CPU 上是这样。 自旋锁不会阻止上下文切换。禁用上下文切换也会禁用多任务处理,这在大多数情况下在 Linux 上是不需要的。 然而,自旋锁被保护免受上下文切换。自旋锁的本质是锁定尝试发生在单个 CPU 命令中。只有在此之后,上下文切换才能破坏CPU 命令中的进程。 实现不是特定于操作系统的,而是特定于 CPU 的:它需要一个可以原子地交换寄存器内容和内存地址的助记符。在 x86 上,它可以通过xchg发生。
Spinlock 不是 Linux 特性,它是一个非常简单的 CPU 特性,至少在大多数 CPU 上是这样。
自旋锁不会阻止上下文切换。禁用上下文切换也会禁用多任务处理,这在大多数情况下在 Linux 上是不需要的。
然而,自旋锁被保护免受上下文切换。自旋锁的本质是锁定尝试发生在单个 CPU 命令中。只有在此之后,上下文切换才能破坏CPU 命令中的进程。
实现不是特定于操作系统的,而是特定于 CPU 的:它需要一个可以原子地交换寄存器内容和内存地址的助记符。在 x86 上,它可以通过xchg发生。