W3cubDocs

/Rust

Function std::hint::spin_loop

pub fn spin_loop()
🔬 This is a nightly-only experimental API. (renamed_spin_loop #55002)

Signals the processor that it is entering a busy-wait spin-loop.

Upon receiving spin-loop signal the processor can optimize its behavior by, for example, saving power or switching hyper-threads.

This function is different than std::thread::yield_now which directly yields to the system's scheduler, whereas spin_loop only signals the processor that it is entering a busy-wait spin-loop without yielding control to the system's scheduler.

Using a busy-wait spin-loop with spin_loop is ideally used in situations where a contended lock is held by another thread executed on a different CPU and where the waiting times are relatively small. Because entering busy-wait spin-loop does not trigger the system's scheduler, no overhead for switching threads occurs. However, if the thread holding the contended lock is running on the same CPU, the spin-loop is likely to occupy an entire CPU slice before switching to the thread that holds the lock. If the contending lock is held by a thread on the same CPU or if the waiting times for acquiring the lock are longer, it is often better to use std::thread::yield_now.

Note: On platforms that do not support receiving spin-loop hints this function does not do anything at all.

© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/hint/fn.spin_loop.html