rustix-futex-sync

Linux futex-based synchronization

Github Actions CI Status zulip chat crates.io page docs.rs docs

Linux futex-based implementations of [`Mutex`], [`RwLock`], [`Condvar`], [`Once`], and [`OnceLock`], as well as [`RawMutex`], [`RawRwLock`], and [`RawCondvar`], derived from the futex code in std, factored out to a standalone `no_std` crate using [`rustix`] to do the futex and [`lock_api`] to provide most of the public `Mutex` and `RwLock` API. `lock_api` does not support poisoning, so support for poisoning is omitted. In this library, `Condvar`, `RawCondvar`, `RawMutex`, and `Once` are guaranteed to be `repr(transparent)` wrappers around a single `AtomicU32`. `RawRwLock` is guaranteed to be a `repr(C)` wrapper around two `AtomicU32`s. The contents of these `AtomicU32`s are not documented, except that all these types' `const fn new()` and `INIT` are guaranteed to initialize them to all zeros. [`Mutex`]: https://docs.rs/rustix-futex-sync/latest/rustix_futex_sync/type.Mutex.html [`RwLock`]: https://docs.rs/rustix-futex-sync/latest/rustix_futex_sync/type.RwLock.html [`Condvar`]: https://docs.rs/rustix-futex-sync/latest/rustix_futex_sync/struct.Condvar.html [`Once`]: https://docs.rs/rustix-futex-sync/latest/rustix_futex_sync/struct.Once.html [`OnceLock`]: https://docs.rs/rustix-futex-sync/latest/rustix_futex_sync/struct.OnceLock.html [`RawMutex`]: https://docs.rs/rustix-futex-sync/latest/rustix_futex_sync/struct.RawMutex.html [`RawRwLock`]: https://docs.rs/rustix-futex-sync/latest/rustix_futex_sync/struct.RawRwLock.html [`RawCondvar`]: https://docs.rs/rustix-futex-sync/latest/rustix_futex_sync/type.RawCondvar.html [`rustix`]: https://github.com/bytecodealliance/rustix#readme [`lock_api`]: https://crates.io/crates/lock_api