| 1 | use std::num::NonZeroUsize; |
|---|---|
| 2 | use std::sync::atomic::{AtomicUsize, Ordering}; |
| 3 | |
| 4 | fn next() -> NonZeroUsize { |
| 5 | static COUNTER: AtomicUsize = AtomicUsize::new(1); |
| 6 | NonZeroUsize::new(COUNTER.fetch_add(1, Ordering::SeqCst)).expect("more than usize::MAX threads") |
| 7 | } |
| 8 | |
| 9 | pub(crate) fn get() -> NonZeroUsize { |
| 10 | thread_local!(static THREAD_ID: NonZeroUsize = next()); |
| 11 | THREAD_ID.with(|&x| x) |
| 12 | } |
| 13 |
