Futex

From Wikipedia, the free encyclopedia

A futex (short for "fast userspace mutex") is a basic tool to implement locking and building higher-level locking abstractions such as semaphores and POSIX mutexes on Linux. They first appeared in the development kernel version 2.5.7; the semantics stabilized as of version 2.5.40, and they are present in the 2.6.x stable kernel series.

Futexes were created by Hubertus Franke (IBM Thomas J. Watson Research Center), Matthew Kirkwood, Ingo Molnár (Red Hat) and Rusty Russell (IBM Linux Technology Center).

A futex consists of a piece of memory (an aligned integer) that can be shared among processes; it can be incremented and decremented by atomic assembler instructions, and processes can wait for the value to become positive. Futex operations are done almost entirely in userspace; the kernel is only involved when a contended case requires arbitration. This allows locking primitives implemented using futexes to be very efficient: since most operations do not require arbitration between processes, most operations can be performed without needing to perform a (relatively expensive) system call.

[edit] See also

[edit] References