デッドロック
deadlock
https://ja.wikipedia.org/wiki/デッドロック
複数の スレッド や プロセス が互いに リソース の解放を待つことで、どちらの処理も進行しないこと
デッドロックが発生する必要条件: Coffman conditions
mutex による発生例
1. スレッド A が mutex_1 を ロック する
2. スレッド B が mutex_2 をロックする
3. スレッド A が mutex_2 を取得しようとするが、すでにスレッド B がロックしているため待機する
4. スレッド B が mutex_1 を取得しようとするが、すでにスレッド A がロックしているため待機する
code:mermaid
graph TD
Aスレッド A -->|ロック| M1mutex_1
Bスレッド B -->|ロック| M2mutex_2
A -->|待機| M2
B -->|待機| M1
M1 -.->|ロック中| A
M2 -.->|ロック中| B
回避策: デッドロックに対処する 4 つの方法
具体例
Go
チャネル でのデッドロック