1ef40d7f6Sopenharmony_ciuse std::mem::size_of; 2ef40d7f6Sopenharmony_ci 3ef40d7f6Sopenharmony_ciuse once_cell::sync::OnceCell; 4ef40d7f6Sopenharmony_ci 5ef40d7f6Sopenharmony_ciconst N_THREADS: usize = 32; 6ef40d7f6Sopenharmony_ciconst N_ROUNDS: usize = 100_000_000; 7ef40d7f6Sopenharmony_ci 8ef40d7f6Sopenharmony_cistatic CELL: OnceCell<usize> = OnceCell::new(); 9ef40d7f6Sopenharmony_ci 10ef40d7f6Sopenharmony_cifn main() { 11ef40d7f6Sopenharmony_ci let start = std::time::Instant::now(); 12ef40d7f6Sopenharmony_ci let threads = 13ef40d7f6Sopenharmony_ci (0..N_THREADS).map(|i| std::thread::spawn(move || thread_main(i))).collect::<Vec<_>>(); 14ef40d7f6Sopenharmony_ci for thread in threads { 15ef40d7f6Sopenharmony_ci thread.join().unwrap(); 16ef40d7f6Sopenharmony_ci } 17ef40d7f6Sopenharmony_ci println!("{:?}", start.elapsed()); 18ef40d7f6Sopenharmony_ci println!("size_of::<OnceCell<()>>() = {:?}", size_of::<OnceCell<()>>()); 19ef40d7f6Sopenharmony_ci println!("size_of::<OnceCell<bool>>() = {:?}", size_of::<OnceCell<bool>>()); 20ef40d7f6Sopenharmony_ci println!("size_of::<OnceCell<u32>>() = {:?}", size_of::<OnceCell<u32>>()); 21ef40d7f6Sopenharmony_ci} 22ef40d7f6Sopenharmony_ci 23ef40d7f6Sopenharmony_cifn thread_main(i: usize) { 24ef40d7f6Sopenharmony_ci for _ in 0..N_ROUNDS { 25ef40d7f6Sopenharmony_ci let &value = CELL.get_or_init(|| i); 26ef40d7f6Sopenharmony_ci assert!(value < N_THREADS) 27ef40d7f6Sopenharmony_ci } 28ef40d7f6Sopenharmony_ci} 29