• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //! Linux `futex`.
2 //!
3 //! # Safety
4 //!
5 //! Futex is a very low-level mechanism for implementing concurrency
6 //! primitives.
7 #![allow(unsafe_code)]
8 
9 use crate::thread::Timespec;
10 use crate::{backend, io};
11 
12 pub use backend::thread::{FutexFlags, FutexOperation};
13 
14 /// `futex(uaddr, op, val, utime, uaddr2, val3)`
15 ///
16 /// # References
17 ///  - [Linux `futex` system call]
18 ///  - [Linux `futex` feature]
19 ///
20 /// # Safety
21 ///
22 /// This is a very low-level feature for implementing synchronization
23 /// primitives. See the references links above.
24 ///
25 /// [Linux `futex` system call]: https://man7.org/linux/man-pages/man2/futex.2.html
26 /// [Linux `futex` feature]: https://man7.org/linux/man-pages/man7/futex.7.html
27 #[inline]
futex( uaddr: *mut u32, op: FutexOperation, flags: FutexFlags, val: u32, utime: *const Timespec, uaddr2: *mut u32, val3: u32, ) -> io::Result<usize>28 pub unsafe fn futex(
29     uaddr: *mut u32,
30     op: FutexOperation,
31     flags: FutexFlags,
32     val: u32,
33     utime: *const Timespec,
34     uaddr2: *mut u32,
35     val3: u32,
36 ) -> io::Result<usize> {
37     backend::thread::syscalls::futex(uaddr, op, flags, val, utime, uaddr2, val3)
38 }
39