Crates.io | wasm_sync |
lib.rs | wasm_sync |
version | 0.1.2 |
source | src |
created_at | 2023-07-18 21:44:09.685527 |
updated_at | 2024-01-19 23:07:57.820218 |
description | Synchronization primitives for both web and native. |
homepage | |
repository | https://github.com/DouglasDwyer/wasm_sync |
max_upload_size | |
id | 919776 |
size | 60,918 |
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. 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.
wasm_sync::Condvar
wasm_sync::Mutex
wasm_sync::RwLock
wasm_sync::Once
wasm_sync::OnceLock
Instead of importing a standard library primitive, import the wasm_sync
variant. For example:
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);