Concurrency in Go Chapter1 (5)

“Concurrency in Go: Tools and Techniques for Developers”の1章 “An Introduction to Concurrency”の読書メモ。Deadlockについて書く。

Deadlock

Deadlockとはプロセス同士が互いの処理終了を待ち、結果としてどの処理も先に進めなくなってしまい、外部からの介入なしに回復できない状態である。Deadlockが発生するコードを以下に示す。

package main

Deadlockは以下の4つの状態(Coffman conditions)を満たす時に発生しうる。

Mutufal Exclusion

  • プロセスが常時、あるリソースを排他的に獲得している

Wait For Condition

  • プロセスがあるリソースを確保しつつ、別のリソースを確保しようと待っている

No Preemption

  • あるプロセスに確保されているリソースはそのプロセスによってのみ開放される

Circular Wait

  • プロセス1がプロセス2を待ち、プロセス2がプロセス1を待っている

Software engineer

Software engineer