TL;DR
飢餓を意味する英単語。並列処理の文脈では、リソーススタベーション(resource starvation)を指すことが多い。スレッドやプロセスが共有リソースを必要としているのに、長時間(または永久に)アクセスできない状態である。
仕組み
Wikipedia によると、原因には、スケジューリングや排他制御のアルゴリズムの誤り、リソースリーク、fork 爆弾のような意図的なサービス妨害がある。優先度でスケジューリングするシステムでは、優先度の高いプロセスが動き続けると、低いプロセスがいつまでも実行されない。対策として、長く待っているプロセスの優先度を少しずつ上げるエージングがある。
例
- writer-starvation: reader を優先する reader-writer mutex で、writer がロックを取れなくなる
注意点
デッドロックとは別の状態である。デッドロックは、プロセスどうしが互いのリソースを待ち、誰も先に進めなくなる状態で、スタベーションは、待っているリソースが他のプロセスにばかり割り当てられ続ける状態である。スタベーションが起きないことは、デッドロックが起きないことよりも強い保証になる。