hint_core_should_pause

The tracking issue for this feature is: #41196


Many programs have spin loops like the following:

# #![allow(unused_variables)]
#fn main() {
use std::sync::atomic::{AtomicBool,Ordering};

fn spin_loop(value: &AtomicBool) {
    loop {
        if value.load(Ordering::Acquire) {
             break;
        }
    }
}

#}

These programs can be improved in performance like so:

# #![allow(unused_variables)]
#![feature(hint_core_should_pause)]
#fn main() {
use std::sync::atomic;
use std::sync::atomic::{AtomicBool,Ordering};

fn spin_loop(value: &AtomicBool) {
    loop {
        if value.load(Ordering::Acquire) {
             break;
        }
        atomic::hint_core_should_pause();
    }
}

#}

Further improvements could combine hint_core_should_pause with exponential backoff or std::thread::yield_now.