2 个版本

0.1.2 2024年1月19日
0.1.1 2024年1月19日
0.1.0 2023年7月18日

#338并发

Download history 992/week @ 2024-04-07 714/week @ 2024-04-14 947/week @ 2024-04-21 727/week @ 2024-04-28 917/week @ 2024-05-05 1117/week @ 2024-05-12 470/week @ 2024-05-19 1092/week @ 2024-05-26 1199/week @ 2024-06-02 1439/week @ 2024-06-09 1624/week @ 2024-06-16 1461/week @ 2024-06-23 822/week @ 2024-06-30 1726/week @ 2024-07-07 1752/week @ 2024-07-14 1651/week @ 2024-07-21

5,989 每月下载量
17 个 Crates (7 个直接) 中使用

MIT/Apache

61KB
575

wasm_sync

Crates.io Docs.rs

wasm_sync 提供在浏览器和本地环境中工作的同步原语。

在 Web 浏览器中,主线程上使用原子等待指令会导致错误 [链接]。这阻止了在 Web 环境中使用标准库同步原语。 wasm_sync 通过在主线程上进行忙等待来解决此问题。其他线程(如专用 Web Worker)仍然使用原子等待指令。

在本地平台上,wasm_sync 简单地重新导出标准库的同步原语。

支持的原始类型

  • wasm_sync::Condvar
  • wasm_sync::Mutex
  • wasm_sync::RwLock
  • wasm_sync::Once
  • wasm_sync::OnceLock

使用方法

而不是导入标准库原语,导入 wasm_sync 变体。例如

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);

依赖项

~0–2MB
~40K SLoC