Linux

Linux 中如何實現自旋鎖?

  • December 30, 2018

我正在考慮如何在 Linux 中為自旋鎖實現“防止上下文切換”功能。大圖/虛擬碼是可以接受的,因為我知道它背後的邏輯。

Spinlock 不是 Linux 特性,它是一個非常簡單的 CPU 特性,至少在大多數 CPU 上是這樣。

自旋鎖不會阻止上下文切換。禁用上下文切換也會禁用多任務處理,這在大多數情況下在 Linux 上是不需要的。

然而,自旋鎖被保護免受上下文切換。自旋鎖的本質是鎖定嘗試發生在單個 CPU 命令中。只有在此之後,上下文切換才能破壞CPU 命令中的程序。

實現不是特定於作業系統的,而是特定於 CPU 的:它需要一個可以原子地交換寄存器內容和記憶體地址的助記符。在 x86 上,它可以通過xchg發生。

引用自:https://unix.stackexchange.com/questions/491167