rsgc 1.1.0

Concurrent GC library for Rust
Documentation
use std::{thread::{Builder, JoinHandle}, sync::Arc};

use super::monitor::Monitor;

pub fn spawn_thread_and_wait_for_running<F, R>(builder: Builder, f: F) -> JoinHandle<R>
where R: Send + 'static,
      F: FnOnce() -> R + Send + 'static,
{
    let spawn_monitor = Arc::new(Monitor::new(false));
    let spawn_monitor2 = spawn_monitor.clone();
    let handle = builder.spawn(move || {
        {
            let mut ml = spawn_monitor2.lock(false);
            **ml = true;
            assert!(ml.notify(), "there must be waiting thread");
        }
        f()
    }).unwrap();
    
    let mut ml = spawn_monitor.lock(false);
    while !**ml {
        ml.wait();
    }

    handle
}