| use std::num::NonZeroUsize; | |
| use std::sync::atomic::{AtomicUsize, Ordering}; | |
| fn next() -> NonZeroUsize { | |
| static COUNTER: AtomicUsize = AtomicUsize::new(1); | |
| NonZeroUsize::new(COUNTER.fetch_add(1, Ordering::SeqCst)).expect("more than usize::MAX threads") | |
| } | |
| pub(crate) fn get() -> NonZeroUsize { | |
| thread_local!(static THREAD_ID: NonZeroUsize = next()); | |
| THREAD_ID.with(|&x| x) | |
| } |