デッドロック(Dead lock)とは、英語で行き詰まりを表す。一般に複数(二つ以上)のプロセスが相互に、相手が保持している資源に 同時アクセスを試み、それぞれ相手側の要求が完了しないために自分のタスクを完了することができず、資源の解放も できないために、相互に資源の解放を永久に待ち続ける状態に陥ってしまっている状態をあらわす。
目次 |
デッドロックの概要
デッドロックでは、フローモデル設計時の設計ミス(構造化されていないワークフロー)により発生するものが考えられる。一般的に、実行される予定のないタスクを他のタスクが待ち続けている状態が発生した時にデッドロックが発生すると言える。
日本語において、まれにDead lockの「lock」を「rock」と間違え、「暗礁に乗り上げる」ことを「デッドロックに乗り上げる」と表現されることがあるが、これは誤用である。
設計ミス(構造化されていないワークフロー)により発生するデッドロック
図1では、最初の分岐でタスクAとタスクBに分岐する。 タスクAはその後フォーク分岐でタスクCとタスクDに分岐する。タスクCに進んだ場合は、タスクDとのマージに進む。
タスクBはタスクDを経てタスクCとのマージに進む。マージが終了した後は、タスクEに進む。 最初の分岐でYesを選択した場合は、その後のフォーク分岐でタスクCとタスクDに進むことができるため、タスクCとタスクDのマージを行うことが可能だが、最初の分岐でNoを選択した場合は、タスクAやタスクCに進むことができないため、タスクCとタスクDのマージを行うことが不可能となってしまう。
このように、BPMNのワークフローとしては間違った記述はなされていないのにも関わらず、構造化がなされていない、細部のチェックが行われていないために意図しないデッドロックが発生していることがある。





