---
title: "spinning-empty-loop"
description: "Detect empty loops that consume a core while waiting unsafely."
image: "https://strider.gempir.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://strider.gempir.com/llms.txt
> Use this file to discover all available pages before exploring further.

# spinning-empty-loop

**Default severity:** `warning`

An empty unconditional loop spins at full speed. An empty loop that only
rereads variables can terminate only through unsynchronized mutation, which is
a data race. Use synchronization or a blocking operation instead.

Conditions containing calls or channel receives are accepted because their
result can change dynamically. Constant-false loops are accepted as disabled
debug scaffolding.

## Bad

```go
for {}
```

## Good

```go
for !ready() {} // condition is dynamically evaluated
```

Source: https://strider.gempir.com/analyzers/spinning-empty-loop/index.mdx
