File tree Expand file tree Collapse file tree 3 files changed +24
-1
lines changed Expand file tree Collapse file tree 3 files changed +24
-1
lines changed Original file line number Diff line number Diff line change 1+ use crate :: arch:: wasm32;
2+ use crate :: convert:: TryInto ;
3+ use crate :: sync:: atomic:: AtomicI32 ;
4+ use crate :: time:: Duration ;
5+
6+ pub fn futex_wait ( futex : & AtomicI32 , expected : i32 , timeout : Option < Duration > ) {
7+ let timeout = timeout. and_then ( |t| t. as_nanos ( ) . try_into ( ) . ok ( ) ) . unwrap_or ( -1 ) ;
8+ unsafe {
9+ wasm32:: memory_atomic_wait32 ( futex as * const AtomicI32 as * mut i32 , expected, timeout) ;
10+ }
11+ }
12+
13+ pub fn futex_wake ( futex : & AtomicI32 ) {
14+ unsafe {
15+ wasm32:: memory_atomic_notify ( futex as * const AtomicI32 as * mut i32 , 1 ) ;
16+ }
17+ }
Original file line number Diff line number Diff line change @@ -55,6 +55,8 @@ cfg_if::cfg_if! {
5555 pub mod mutex;
5656 #[ path = "rwlock_atomics.rs" ]
5757 pub mod rwlock;
58+ #[ path = "futex_atomics.rs" ]
59+ pub mod futex;
5860 } else {
5961 #[ path = "../unsupported/condvar.rs" ]
6062 pub mod condvar;
Original file line number Diff line number Diff line change 11cfg_if:: cfg_if! {
2- if #[ cfg( any( target_os = "linux" , target_os = "android" ) ) ] {
2+ if #[ cfg( any(
3+ target_os = "linux" ,
4+ target_os = "android" ,
5+ all( target_arch = "wasm32" , target_feature = "atomics" ) ,
6+ ) ) ] {
37 mod futex;
48 pub use futex:: Parker ;
59 } else {
You can’t perform that action at this time.
0 commit comments