futex(快速用戶區互斥的簡稱)是一個在Linux上實現鎖定和構建高級抽象鎖如信號量POSIX互斥的基本工具。它們第一次出現在內核開發的2.5.7版;其語義在2.5.40固定下來,然後在2.6.x系列穩定版內核中出現。

Futex 是由Hubertus FrankeIBM Thomas J. Watson 研究中心), Matthew KirkwoodIngo MolnarRed Hat)和 Rusty RussellIBM Linux 技術中心)等人創建的。

Futex 由一塊能夠被多個進程共享的內存空間(一個對齊後的整型變量)組成;這個整型變量的值能夠通過匯編語言調用CPU提供的原子操作指令來增加或減少,並且一個進程可以等待直到那個值變成正數。Futex 的操作幾乎全部在用戶空間完成;只有當操作結果不一致從而需要仲裁時,才需要進入操作系統內核空間執行。這種機制允許使用 futex 的鎖定原語有非常高的執行效率:由於絕大多數的操作並不需要在多個進程之間進行仲裁,所以絕大多數操作都可以在應用程序空間執行,而不需要使用(相對高代價的)內核系統調用

參考資料 編輯

  • Hubertus Franke, Rusty Russell, Matthew Kirkwood, fuss, futexes and furwocks: Fast Userlevel Locking in Linux, Ottawa Linux Symposium 2002, online

外部連結 編輯