Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

For posterity, here's the Rust version I arrived at:

    let number = Arc::new(AtomicUsize::new(0));
    let finished = Arc::new(AtomicBool::new(false));

    let finished_clone = Arc::clone(&finished);
    let delay = task::spawn(async move {
        sleep(Duration::from_secs(1)).await;
        finished_clone.store(true, Ordering::Release);
    });

    for _ in 0..10 {
        let number_clone = Arc::clone(&number);
        let finished_clone = Arc::clone(&finished);

        task::spawn(async move {
            while !finished_clone.load(Ordering::Acquire) {
                number_clone.fetch_add(1, Ordering::SeqCst);
                task::yield_now().await;
            }
        });
    }
    
    delay.await.unwrap();
https://play.rust-lang.org/?version=stable&mode=debug&editio...


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: