1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//! # Zero-Pool: Ultra-High Performance Thread Pool
//!
//! A thread pool implementation designed for maximum performance through:
//! - Zero-overhead task submission via raw pointers
//! - Result-via-parameters pattern (no result transport)
//! - Single global queue with optimal load balancing
//! - Function pointer dispatch (no trait objects)
//! - Lock-free queue operations with event-based worker coordination
//!
//! ## Safety
//!
//! This library achieves high performance through raw pointer usage. Users must ensure:
//! - Parameter structs remain valid until `TaskFuture::wait()` completes
//! - Result pointers remain valid until task execution finishes
//! - Task functions take exactly one parameter (usually the task parameter struct)
//! - Task functions are thread-safe and data-race free
//! - No undefined behavior in unsafe task code
//!
//! This API is unsafe-by-contract and performs no runtime validation of these invariants.
//!
//! ## Example
//!
//! ```rust
//! use zero_pool::ZeroPool;
//!
//! struct MyTaskParams { value: u64, result: *mut u64 }
//!
//! fn my_task(params: &MyTaskParams) {
//! unsafe { *params.result = params.value * 2; }
//! }
//!
//! let pool = ZeroPool::new();
//! let mut result = 0u64;
//! let task_params = MyTaskParams { value: 42, result: &mut result };
//! pool.submit_task(my_task, &task_params).wait();
//! assert_eq!(result, 84);
//! ```
use NonNull;
use OnceLock;
pub use ZeroPool;
pub use TaskFuture;
static GLOBAL_ZP: = new;
/// Returns a reference to the lazily initialized global pool.
///
/// This is the simplest way to share a single pool across your application.
/// The pool is created on first use using [`ZeroPool::new`].
/// Function pointer type for task execution
///
/// Tasks receive a non-null pointer to their parameter struct and must
/// cast it to the appropriate type for safe access.
pub type TaskFnPointer = fn;
/// Non-null pointer to task parameter struct
///
/// This is type-erased for uniform storage but must be cast back
/// to the original parameter type within the task function.
pub type TaskParamPointer = ;