pub fn pin_current_thread_to(core: usize) -> bool {
#[cfg(target_os = "macos")]
let macos_qos = request_performance_qos();
#[cfg(not(target_os = "macos"))]
let macos_qos = false;
let hard_pin = match core_affinity::get_core_ids() {
Some(ids) => match ids.get(core).copied() {
Some(id) => core_affinity::set_for_current(id),
None => false,
},
None => false,
};
hard_pin || macos_qos
}
pub fn available_cores() -> Option<usize> {
core_affinity::get_core_ids().map(|ids| ids.len())
}
#[cfg(target_os = "macos")]
pub fn request_performance_qos() -> bool {
const QOS_CLASS_USER_INTERACTIVE: u32 = 0x21;
extern "C" {
fn pthread_set_qos_class_self_np(qos_class: u32, relative_priority: i32) -> i32;
}
unsafe { pthread_set_qos_class_self_np(QOS_CLASS_USER_INTERACTIVE, 0) == 0 }
}