Skip to main content

proxide_parallel_rt/
lib.rs

1use std::sync::atomic::{AtomicUsize, Ordering};
2
3static NUM_THREADS: AtomicUsize = AtomicUsize::new(1);
4
5pub fn set_num_threads(n: usize) {
6    NUM_THREADS.store(n.max(1), Ordering::Relaxed);
7}
8
9pub fn num_threads() -> usize {
10    NUM_THREADS.load(Ordering::Relaxed)
11}
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16
17    #[test]
18    fn default_is_one() {
19        assert_eq!(num_threads(), 1);
20    }
21
22    #[test]
23    fn set_and_get() {
24        set_num_threads(4);
25        assert_eq!(num_threads(), 4);
26        set_num_threads(1);
27    }
28
29    #[test]
30    fn zero_clamps_to_one() {
31        set_num_threads(0);
32        assert_eq!(num_threads(), 1);
33        set_num_threads(1);
34    }
35}