# 致命错误：所有 goroutine 处于休眠状态 - 死锁！
goroutine 1 [sync.Mutex.Lock]：

- **ID:** `go/deadlock-mutex-double-lock`
- **领域:** go
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

一个 goroutine 在未解锁的情况下两次锁定同一个 sync.Mutex，或两个 goroutine 以相反顺序获取两个互斥锁。运行时检测到完全停止。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 1.0+ | active | — | — |

## 解决方案

1. **** (96% 成功率)
   ```
   func (s *Service) Do() {
    s.mu.Lock()
    defer s.mu.Unlock()
    // ...
}
   ```
2. **** (93% 成功率)
   ```
   // Always lock A before B
func transfer(a, b *Account) {
    if a.id < b.id { a.mu.Lock(); b.mu.Lock() } else { b.mu.Lock(); a.mu.Lock() }
    defer a.mu.Unlock(); defer b.mu.Unlock()
}
   ```

## 无效尝试

- **** — sync.Mutex has no timeout API; you must restructure the code or use a channel-based lock. (90% 失败率)
- **** — All runnable goroutines are blocked on the mutex; more Ps do not help. (95% 失败率)
