このページの本文へ

なれる!SE 間違いだらけの?IT用語辞典(中二版) 第17回

やっぱり中二病の基本は技だよなと思い出させるIT用語

2013年05月30日 18時00分更新

  • この記事をはてなブックマークに追加
  • 本文印刷

回答編


デッドロックはデータベースやプログラミングの用語ね。二つ以上のプロセスが同時にリソースアクセスしようとする際に起こる問題……って、ちょっと桜坂どうしたのよ。げっそりとやつれちゃって。


三十分も放置されれば誰だってこうなりますよ……。僕、律儀に待ってたんですからね、室見さんが指パッチンしてくれるの。


ふふふ。


なぜ不敵な笑い!?


私がなんの考えもなくあんたを理不尽に立たせていたと思って? デッドロックによって起こるシステムのフリーズを実際に味わってもらっていたのよ!


な、なんですってぇぇえええ!?


はい白板に注目。同一データベース上にAとB二つのデータがあるとします。プロセス1はA→Bの順で操作プロセス2はB→Aの順で内容を編集します。ここで両プロセスは同時にデータベースアクセスを開始しました。さて、何が起こるでしょう?


何って……プロセス1がAを編集しますよね。プロセス2がBを編集……で、お互いの作業が終わったら今度は逆に1がBをいじって2がAをいじる……何かおかしいですか?


AとBの処理が独立してたらそれもありだけど、二つが連続していたら? たとえばAの口座データから残高を減らしてBの口座データに振り込むような場合。ちなみにプロセス2はその逆をやろうとしている。


うーん……プロセス1はデータAにアクセスしたままBも処理しようとしますよね。でもBはプロセス2が処理中で……あ。


そう、アクセス拒否されるわよね。だからプロセス1はプロセス2がデータBの編集を終えるまで待機状態になる。でもプロセス2は逆にプロセス1がAの編集を終えるのを待っている。両すくみ状態でしょ? これがデッドロックシステムフリーズの原因ね。


どうすればいいんでしょう?


シンプルに考えるなら待機状態の制限時間を決める。もしくはフリーズしている処理を強制失敗させて以前の状態に戻すことね。まぁそもそもデッドロックが起こるようなプロセスは作らないってのが基本だけど。不測の事態はどこでも起こりえるしね。


なるほど……勉強になります。……って、あれ? デッドロックは同一リソースに二つ以上の処理がアクセスして固まっちゃうことなんですよね?


そうだけど。


さっき僕が放置されてたのって単純に室見さんというプロセスがリソース桜坂を開放し忘れてただけですよね? 両すくみって話じゃないですよ。デッドロックの定義とは違いません?


(ぎくっ)


なんかぎくって音が聞こえたんですけど。


やーねー、そんなことあるわけないじゃない。
あは、あははははは
(笑いながら遠ざかっていく)


あ、逃げた! やっぱり後付けの理由だったか。もお! 今日という今日は勘弁なりません。このパワハラ上司、一回思い知らせてやらないと!

(互いに中二ポーズを取り合いながら追撃戦。奇妙な眼差しで見つめる他テナントの社員達。フェイドアウト)


【解説】

デッドロック
データベース・プログラミング用語。複数のプロセスが同一リソースにアクセスしようとして両すくみ状態になること。所謂「排他制御」の副作用。対策としてはタイムアウト値の設定やデッドロック状態のプロセスを監視し強制終了させる、などがある。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン