algeon-datafusion 0.1.2

DataFusion physical-plan adapter for native GPU execution.
Documentation
use std::{
    sync::{Arc, OnceLock},
    thread,
    time::Duration,
};

use tokio::sync::{OwnedSemaphorePermit, Semaphore};

static SERIAL: OnceLock<Arc<Semaphore>> = OnceLock::new();

fn semaphore() -> Arc<Semaphore> {
    Arc::clone(SERIAL.get_or_init(|| Arc::new(Semaphore::new(1))))
}

pub(crate) fn lock() -> OwnedSemaphorePermit {
    loop {
        match semaphore().try_acquire_owned() {
            Ok(permit) => return permit,
            Err(_) => thread::sleep(Duration::from_millis(1)),
        }
    }
}