//! Header: `pthread.h` //! //! QuRT provides a subset of POSIX pthread functionality optimized for real-time systems. use super::*; use crate::prelude::*; // Thread creation attributes pub const PTHREAD_CREATE_JOINABLE: c_int = 0; pub const PTHREAD_CREATE_DETACHED: c_int = 1; // Mutex types pub const PTHREAD_MUTEX_NORMAL: c_int = 0; pub const PTHREAD_MUTEX_RECURSIVE: c_int = 1; pub const PTHREAD_MUTEX_ERRORCHECK: c_int = 2; pub const PTHREAD_MUTEX_DEFAULT: c_int = PTHREAD_MUTEX_NORMAL; // Mutex protocol pub const PTHREAD_PRIO_NONE: c_int = 0; pub const PTHREAD_PRIO_INHERIT: c_int = 1; pub const PTHREAD_PRIO_PROTECT: c_int = 2; // Thread priority constants pub const PTHREAD_MIN_PRIORITY: c_int = 0; pub const PTHREAD_MAX_PRIORITY: c_int = 255; // Initializer constants pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = 0xFFFFFFFF; pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = 0xFFFFFFFF; pub const PTHREAD_ONCE_INIT: pthread_once_t = 0; // Stack size pub const PTHREAD_STACK_MIN: size_t = 8192; // Additional pthread types and attributes pub const PTHREAD_SCOPE_SYSTEM: c_int = 0; pub const PTHREAD_SCOPE_PROCESS: c_int = 1; pub const PTHREAD_INHERIT_SCHED: c_int = 0; pub const PTHREAD_EXPLICIT_SCHED: c_int = 1; extern "C" { // Thread management pub fn pthread_create( thread: *mut pthread_t, attr: *const pthread_attr_t, start_routine: extern "C" fn(*mut c_void) -> *mut c_void, arg: *mut c_void, ) -> c_int; pub fn pthread_join(thread: pthread_t, retval: *mut *mut c_void) -> c_int; pub fn pthread_detach(thread: pthread_t) -> c_int; pub fn pthread_exit(retval: *mut c_void) -> !; pub fn pthread_self() -> pthread_t; pub fn pthread_equal(t1: pthread_t, t2: pthread_t) -> c_int; // Thread attributes pub fn pthread_attr_init(attr: *mut pthread_attr_t) -> c_int; pub fn pthread_attr_destroy(attr: *mut pthread_attr_t) -> c_int; pub fn pthread_attr_setstacksize(attr: *mut pthread_attr_t, stacksize: size_t) -> c_int; pub fn pthread_attr_getstacksize(attr: *const pthread_attr_t, stacksize: *mut size_t) -> c_int; pub fn pthread_attr_setdetachstate(attr: *mut pthread_attr_t, detachstate: c_int) -> c_int; pub fn pthread_attr_getdetachstate( attr: *const pthread_attr_t, detachstate: *mut c_int, ) -> c_int; // Mutex operations pub fn pthread_mutex_init( mutex: *mut pthread_mutex_t, attr: *const pthread_mutexattr_t, ) -> c_int; pub fn pthread_mutex_destroy(mutex: *mut pthread_mutex_t) -> c_int; pub fn pthread_mutex_lock(mutex: *mut pthread_mutex_t) -> c_int; pub fn pthread_mutex_trylock(mutex: *mut pthread_mutex_t) -> c_int; pub fn pthread_mutex_unlock(mutex: *mut pthread_mutex_t) -> c_int; // Mutex attributes pub fn pthread_mutexattr_init(attr: *mut pthread_mutexattr_t) -> c_int; pub fn pthread_mutexattr_destroy(attr: *mut pthread_mutexattr_t) -> c_int; pub fn pthread_mutexattr_settype(attr: *mut pthread_mutexattr_t, kind: c_int) -> c_int; pub fn pthread_mutexattr_gettype(attr: *const pthread_mutexattr_t, kind: *mut c_int) -> c_int; // Condition variables pub fn pthread_cond_init(cond: *mut pthread_cond_t, attr: *const pthread_condattr_t) -> c_int; pub fn pthread_cond_destroy(cond: *mut pthread_cond_t) -> c_int; pub fn pthread_cond_wait(cond: *mut pthread_cond_t, mutex: *mut pthread_mutex_t) -> c_int; pub fn pthread_cond_timedwait( cond: *mut pthread_cond_t, mutex: *mut pthread_mutex_t, abstime: *const timespec, ) -> c_int; pub fn pthread_cond_signal(cond: *mut pthread_cond_t) -> c_int; pub fn pthread_cond_broadcast(cond: *mut pthread_cond_t) -> c_int; // Condition variable attributes pub fn pthread_condattr_init(attr: *mut pthread_condattr_t) -> c_int; pub fn pthread_condattr_destroy(attr: *mut pthread_condattr_t) -> c_int; pub fn pthread_condattr_setclock(attr: *mut pthread_condattr_t, clock_id: clockid_t) -> c_int; // Thread-local storage pub fn pthread_key_create( key: *mut pthread_key_t, destructor: Option, ) -> c_int; pub fn pthread_key_delete(key: pthread_key_t) -> c_int; pub fn pthread_getspecific(key: pthread_key_t) -> *mut c_void; pub fn pthread_setspecific(key: pthread_key_t, value: *const c_void) -> c_int; // One-time initialization pub fn pthread_once(once_control: *mut pthread_once_t, init_routine: extern "C" fn()) -> c_int; // GNU extensions pub fn pthread_getname_np(thread: pthread_t, name: *mut c_char, len: size_t) -> c_int; pub fn pthread_attr_setaffinity_np( attr: *mut pthread_attr_t, cpusetsize: size_t, cpuset: *const cpu_set_t, ) -> c_int; pub fn pthread_attr_getaffinity_np( attr: *mut pthread_attr_t, cpusetsize: size_t, cpuset: *mut cpu_set_t, ) -> c_int; // POSIX standard pub fn posix_memalign(memptr: *mut *mut c_void, alignment: size_t, size: size_t) -> c_int; }