1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! `wasm_sync` offers synchronization primitives that work in both browser and native contexts.
//!
//! In web browsers, use of atomic wait instructions on the main thread [causes an error](https://github.com/WebAssembly/threads/issues/106). This prevents the use of standard library synchronization primitives within web contexts. `wasm_sync` solves this problem by busy-spinning on the main thread. Other threads, like dedicated web workers, still use atomic wait instructions.
//!
//! On native platforms, `wasm_sync` simply re-exports the standard library's synchronization primitives.
//!
//! ## Supported primitives
//!
//! - [`wasm_sync::Condvar`](crate::Condvar)
//! - [`wasm_sync::Mutex`](crate::Mutex)
//! - [`wasm_sync::RwLock`](crate::RwLock)
//! - [`wasm_sync::Once`](crate::Once)
//! - [`wasm_sync::OnceLock`](crate::OnceLock)
//!
//! ## Usage
//!
//! Instead of importing a standard library primitive, import the `wasm_sync` variant. For example:
//!
//! ```rust
//! use std::sync::Arc;
//! use std::thread;
//! use wasm_sync::Mutex;
//!
//! let mutex = Arc::new(Mutex::new(0));
//! let c_mutex = Arc::clone(&mutex);
//!
//! thread::spawn(move || {
//! *c_mutex.lock().unwrap() = 10;
//! }).join().expect("thread::spawn failed");
//! assert_eq!(*mutex.lock().unwrap(), 10);
//! ```
//!
//!
/// Provides the ability to generate and compare type IDs in a `const` context.
pub use crate*;
pub use crateCondvar;
pub use crateMutex;
pub use crateRwLock;