#[cfg(target_os = "linux")]
pub mod linux_futex;
pub mod atomic_ext;
pub mod instance_tls;
pub use atomic_ext::*;
pub use instance_tls::*;
#[cfg(target_os = "linux")]
pub use linux_futex::*;
use crate::error::Result;
pub trait PlatformSync {
fn futex_wait(
addr: &std::sync::atomic::AtomicU32,
val: u32,
timeout: Option<std::time::Duration>,
) -> Result<()>;
fn futex_wake(addr: &std::sync::atomic::AtomicU32, count: u32) -> Result<usize>;
}
#[cfg(target_os = "linux")]
pub type DefaultPlatformSync = crate::thread::linux_futex::LinuxFutex;
#[cfg(not(target_os = "linux"))]
pub type DefaultPlatformSync = crate::thread::FallbackSync;
#[cfg(not(target_os = "linux"))]
pub struct FallbackSync;
#[cfg(not(target_os = "linux"))]
impl PlatformSync for FallbackSync {
fn futex_wait(
_addr: &std::sync::atomic::AtomicU32,
_val: u32,
_timeout: Option<std::time::Duration>,
) -> Result<()> {
std::thread::yield_now();
Ok(())
}
fn futex_wake(_addr: &std::sync::atomic::AtomicU32, _count: u32) -> Result<usize> {
Ok(0)
}
}