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