summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/src/docs/missing_spin_loop.txt
blob: 3a06a91d718355bc7bfe2c3084a87dedc51df29b (plain)
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
### What it does
Check for empty spin loops

### Why is this bad?
The loop body should have something like `thread::park()` or at least
`std::hint::spin_loop()` to avoid needlessly burning cycles and conserve
energy. Perhaps even better use an actual lock, if possible.

### Known problems
This lint doesn't currently trigger on `while let` or
`loop { match .. { .. } }` loops, which would be considered idiomatic in
combination with e.g. `AtomicBool::compare_exchange_weak`.

### Example

```
use core::sync::atomic::{AtomicBool, Ordering};
let b = AtomicBool::new(true);
// give a ref to `b` to another thread,wait for it to become false
while b.load(Ordering::Acquire) {};
```
Use instead:
```
while b.load(Ordering::Acquire) {
    std::hint::spin_loop()
}
```