Futex

futex （ 快速用戶區互斥的簡稱 ） 是一個在Linux上實現鎖定和構建高級抽象鎖如信號量和POSIX互斥的基本工具 。 它們第一次出現在內核開發的 2.5.7 版 ； 其語義在 2.5.40 固定下來 ， 然後在 2.6. x系列穩定版內核中出現 。 Futex 是由Hubertus Franke （ IBM Thomas J. Watson 研究中心 ）, Matthew Kirkwood ， Ingo Molnar （ Red Hat ） 和 Rusty Russell （ IBM Linux 技術中心 ） 等人創建的 。 Futex 由一塊能夠被多個進程共享的內存空間 （ 一個對齊後的整型變量 ） 組成 ； 這個整型變量的值能夠通過彙編語言調用CPU提供的原子操作指令來增加或減少 ， 並且一個進程可以等待直到那個值變成正數 。 Futex 的操作幾乎全部在用戶空間完成 ； 只有當操作結果不一致從而需要仲裁時 ， 才需要進入操作系統內核空間執行 。 這種機制允許使用 futex 的鎖定原語有非常高的執行效率 ： 由於絕大多數的操作並不需要在多個進程之間進行仲裁 ， 所以絕大多數操作都可以在應用程序空間執行 ， 而不需要使用 （ 相對高代價的 ） 內核系統調用 。