• 複数のプロセスが、お互いのリソース開放を永久に待ち続ける状態が発生しない
  • 広義のデッドロック(Livelock)も禁止

ネタ

  • Any deadlock-free mutex algorithm requires allocating and then reading or writing at least n distinct locations in the worst case.

定理

Deadlock-freedom特性を持つMutexアルゴリズムは、同時スレッドの最大数をnとしたときに、少なくともn個のメモリ領域を読み書きする必要がある

証明

  • 3スレッドあるとして、2つのメモリ領域のみを使用するDeadlock freeなLockアルゴリズムがあると仮定して、矛盾を示す (背理法)
  • Covering Stateの概念を導入
    • 各メモリ位置に対して、少なくとも1つのスレッドがその位置に書き込もうとしている状態
    • Lockオブジェクトの状態は、クリティカルセクションにいるスレッドが0に見える
  • Covering stateからはじまる実行を考える
    1. まずスレッドCを実行させる。Cはクリティカルセクションに入る。
    2. スレッドA,Bを実行させる。Covering stateを更新させる。
    3. AもBも、Cがクリティカルセクションにいるかどうか判断できない (何の印もないので)
      1. で、AがCSに突入して、AとCが同時にCSにいることになってオシマイ