IT

【超初心者向け】デットロックとは?図解で分かりやすく解説します!

本記事は教養記事シリーズその35です。その他の教養記事はコチラの目次をご覧ください。

★この記事の流れ★

スレッドとは?
ロックとは?
デッドロックとは?

本記事は初学者の理解を優先しているため正確性に欠ける場合があります。致命的なミスはご指摘いただけますと助かります。

スレッド

マルチスレッドにおいて、複数のスレッドが互いのスレッドを排他してしまいプログラムが停止すること。

[JavaA2Eより]

 

スレッドってなに…?

 

プログラミングを実行するときの単位の1つをスレッドと呼びます。2ちゃんねるの「スレ」という言葉を聞いたことがある人がいるかもしれませんが,まさにスレッドの略語で「話題の単位」を表しています。

つまり,デッドロックというのは,あるプログラムの実行単位ともう一方の実行単位が影響し合ってプログラムが進まなくなってしまうことを指します。

 

ロック

影響って具体的にとんなこと?

 

影響を与える,というのは具体的には「ロックする」という操作に当たります。ロックというのは,プログラムであるスレッドの処理を開始しようとしたときに,変更されてはいけない資源(変数やデータなど)を変更されないようにアクセスを禁止することです。ロックには読み書きを禁止する「占有ロック」と,読み出しのみを許可する「共有ロック」の2種類があります。

デッドロックとは,2つのスレッドがお互いに異なる資源を占有ロックし合った状態のことを指しています。

デッドロックの流れ
実際には他にもデッドロックとなる原因は考えられます。
イメージとしては,お互い両想いであるAさんとB君がいたとして,AさんとB君の両方ともが「絶対に告白だけはされたくない」「絶対に自分から告白したい」という信念を持っていた場合に相当します。この恋愛は前に進みませんね…。

 

ひとこと

デッドロックという言葉は「手詰まり」を意味する外来語としても利用されることがあります。回避方法としては,なるべく使われやすいセットで資源を管理するようにすることや,資源へのアクセス順番を定めておくことなどが挙げられます。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です