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

外部链接