デッドロックとは?システム思考停止!?奪い合いの末路

響きがカッコいい単語 デッドロックとは?IT
この記事は約5分で読めます。

響きがかっこいい単語、今回のテーマはデッドロック

直訳すると「死のロック」「死の施錠」という物騒な名前ですが、これはIT関連の用語で、システムが突然動かなくなってしまうバグの原因ともなる現象の名前なんです。

どんな現象なのか、システムの中で何が起こっているのか学んでいきましょう!

「デッドロック」のことば診断

当サイトでは、響きがかっこよく、知的好奇心をくすぐる珠玉の単語を厳選して、中学生から大人までわかりやすく紹介しています。

今回のテーマ「デッドロック」について、「身近さ」「レア度」「難解度」をそれぞれ診断してみました!

身近さ:3.0(どれくらい身近な世界の話か)

3.0

ITやプログラミングの世界では非常に重要な概念ですが、IT系の仕事をしていない限りは意識する機会はほとんどないでしょう。

ただし、パソコンやスマートフォンを使ってWebサイトやアプリが固まってしまった時は、裏ではデッドロックが発生してしまっている可能性はあります。

レア度: 4.0(日常生活での遭遇頻度)

4.0

IT系の職場に努めている人が仕事中に使用する言葉です。一般の人がニュースや会話で耳にする機会はほとんどありません。

難解度:4.0(言葉の意味理解の難易度)

4.0

概念はそこまで難しくありませんが、どういう状態に陥っているのか、何故発生するかの仕組みまで理解しようとするとなかなか難しいかもしれません。

デッドロックって何?

デッドロック(deadlock)とは、パソコンのソフトやスマホのアプリ等が固まって動かなくなってしまう原因の一つです。

「デッド(dead)」は「死んだ」、「ロック(lock)」は「鍵がかかった」という意味で、「死のロック」「死の施錠」状態を表しています。

コンピューターの世界では、複数の処理が同時に動いていて、それぞれが必要な資源(メモリ、ファイル、データベース)を取り合っています。

そうした資源には、一度に1つの処理からしか使えないようなものもあります。

普通なら「順番待ち」で解決するのですが、タイミングが悪いと全員が待ち状態になってしまい、誰も前に進めなくなってしまうんです。

ピザ作りで理解するデッドロック

デッドロックを身近なピザ作りで例えてみましょう!

AさんとBさんが一緒にピザを作ろうとしています。ピザを作るには「トマトソース」と「チーズ」の両方が必要です。

しかし、トマトソースもチーズも1つずつしか有りません。トマトソースは瓶に、チーズは袋に入ってて、テーブルの真ん中のトレーの上においてあります。

AさんとBさんの眼の前にはそれぞれ自分のピザ生地がおいてあります。

さあ同時に1枚ずつピザを作りはじめましょう!

  1. Aさんがテーブル真ん中のトレーからトマトの瓶を手に取りピザ生地にかけ始めました
    Bさんはテーブル真ん中のトレーからチーズの袋を手に取りピザ生地に乗せ始めました
  2. Aさんがトマトをかけ終わったので、トレーにチーズの袋が返ってくるのを待ちます
    Bさんもチーズは乗せ終わったので、トレーにトマトの瓶が返ってくるのを待ちます
  3. ところが、トマトソースの瓶もチーズの袋も、一向にトレーの上に戻って来ません
  4. AさんもBさんも自分が使った道具を持ったまま次の道具が返って来るのを待っていたので、デッドロック状態に陥り、ピザが完成することは有りませんでした。

これがデッドロックの典型的な例です。お互いが相手の持っているものを欲しがっているのに自分が持っているものは手放さないので、作業が一向に進まなくなってしまったのです。

この例えは人間なので、お互いに「チーズをください」「トマトをください」と言えば済むのですが、プログラムになるとそうはいきません。

実際のコンピューターでも、プログラムAがファイル1を開いてファイル2を待ち、プログラムBがファイル2を開いてファイル1を待つ、といった状況で同じことが起こってしまうんです。

デッドロックの対処法

デッドロックが起きてしまった場合、システムはそのまま固まってしまい、自然に解消されることはほとんどありません。

そこで、そもそもデッドロックが起きないようにあらかじめ仕組みを工夫しておくことが大切になります。

代表的な対処法として、資源の使い方に順番を決めておくとデッドロックは防ぐことが出来ます

ピザ作りの例で言えば、「生地にはまずトマトソースをかけて、次は必ずチーズを載せる」というように、みんなが同じ順番で道具を使うルールにすればどうなるでしょう?

Aさんがまずトマトの瓶を手に取ると、Bさんの初動はトマトの瓶がトレーに戻ってくるのを待つことになります。

Aさんがトマトを使い終わるとAさんはチーズを取るためにトマトの瓶はトレーに戻すことになるので、Bさんは戻ってきたトマトの瓶を使うことが出来ます

この様に順番をしっかりと決めてさえいればデッドロックは防げるのです。

他にも、時間が経ったら一旦諦めるというルールを加えることでもデッドロックという最悪の状況を防ぐことが出来ます。

AさんとBさんがデッドロック状態に陥ったとしても、30分経ったら諦めて新しいピザを作り始めることにすれば一生ピザが完成しないという事態は防ぐことが出来ますね

30分経過後AさんとBさんが全く同時にピザ作りを再開するとまた同じことになってしまうため、諦めた場合にそれぞれランダムな時間待機してから作り始めると行った工夫は必要になります。

このように、ちょっとした工夫をすることでデッドロックは防ぐことができます。

ただ、システム開発はいろいろなことを考慮しながら進めていくので、うっかりデッドロックが発生する危険を見逃したまま開発が進んでしまうことがあります

こうして対策がされないまま世の中にリリースされてしまったシステムなどでバグが発生して話題になったりするわけです。

まとめ

今回は響きがかっこいい単語としてデッドロックについて紹介しました。

「死のロック」という物騒な名前の通り、場合によってはシステムが当分の間動かなくなってしまうという困った現象でした。

コンピューターの世界では、デッドロックを回避・検出・回復するための様々な仕組みが取り入れられており、私たちが普段使っているデバイスやWebサイトもデッドロックが起こらないように気を配りながら作られているんです。

次回パソコンが固まったりアプリが応答しなくなったりしたとき、「もしかしてデッドロックかな?」と思い出してもらえれば、少しだけコンピューターの仕組みに親しみを感じられるかもしれませんね。

コメント

タイトルとURLをコピーしました