Tiny Async Wasi Preview 2 Runtime
wasm wasi preview2 async runtime rust
at master 34 lines 722 B view raw
1use std::sync::atomic::{AtomicUsize, Ordering}; 2 3static NEXT_TASK_ID: AtomicUsize = AtomicUsize::new(1); 4static NEXT_RESOURCE_ID: AtomicUsize = AtomicUsize::new(1); 5 6#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] 7pub struct TaskId { 8 value: usize, 9} 10 11impl TaskId { 12 pub(crate) fn allocate() -> Self { 13 Self { 14 value: next_value(&NEXT_TASK_ID), 15 } 16 } 17} 18 19#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] 20pub struct ResourceId { 21 value: usize, 22} 23 24impl ResourceId { 25 pub(crate) fn allocate() -> Self { 26 Self { 27 value: next_value(&NEXT_RESOURCE_ID), 28 } 29 } 30} 31 32fn next_value(counter: &AtomicUsize) -> usize { 33 counter.fetch_add(1, Ordering::Relaxed) 34}