about summary refs log tree commit diff
path: root/library/std/src/sys/wasm/futex_atomics.rs
blob: 3d8bf42f7255eec2b11660c02d5d082eb6a3e422 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use crate::arch::wasm32;
use crate::convert::TryInto;
use crate::sync::atomic::AtomicI32;
use crate::time::Duration;

pub fn futex_wait(futex: &AtomicI32, expected: i32, timeout: Option<Duration>) {
    let timeout = timeout.and_then(|t| t.as_nanos().try_into().ok()).unwrap_or(-1);
    unsafe {
        wasm32::memory_atomic_wait32(futex as *const AtomicI32 as *mut i32, expected, timeout);
    }
}

pub fn futex_wake(futex: &AtomicI32) {
    unsafe {
        wasm32::memory_atomic_notify(futex as *const AtomicI32 as *mut i32, 1);
    }
}