Source code

Revision control

Copy as Markdown

Other Tools

//! 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<extern "C" fn(*mut c_void)>,
) -> 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;
}