マルチスレッド

記事数:(2)

アルゴリズム

デッドロック:プログラムの行き詰まり

複数の仕事が、同時には使えないものを取り合ってしまうことで、どれも仕事が進まなくなってしまうことがあります。これを行き詰まりといいます。ちょうど、交差点で車が同時に進入して、お互いに譲らず、身動きが取れなくなってしまう状況に似ています。 コンピュータの世界では、この状態をデッドロックと呼びます。複数のプログラムが、それぞれ必要な資源を握りしめたまま、他のプログラムが持っている資源を待ってしまうことで起こります。例えば、プログラムAは資源Xを使っている最中に資源Yを必要とし、同時にプログラムBは資源Yを使っている最中に資源Xを必要とする場合、どちらも資源を待ち続け、永遠に仕事が終わらなくなります。 このデッドロックは、システム全体を止めてしまう深刻な問題を引き起こす可能性があります。例えば、たくさんの人が同時に同じ銀行口座にアクセスして預金を引き出そうとした際に、デッドロックが発生すると、誰もお金を引き出せなくなってしまいます。また、システム全体が遅くなる原因にもなります。 特に、たくさんのプログラムが同じデータを使おうとする場合、デッドロックの危険性が高まります。例えば、多くのプログラムが同時にデータベースの情報を書き換えようとしたり、同じファイルを開こうとしたりすると、デッドロックが起こりやすくなります。 デッドロックは、一度発生すると、外から手助けをしない限り解消できません。そのため、デッドロックが起きないようにするための対策がとても大切です。例えば、資源を使う順番を決めておく、資源を使える時間を制限する、など様々な方法があります。これらの方法を適切に組み合わせることで、システムの安定稼働を実現できます。
アルゴリズム

セマフォ:資源アクセスを制御する仕組み

複数の仕事仲間が同じ道具を使いたい時、順番に使わないと混乱が生じますよね? 例えば、プリンターを3台置いている職場では、同時に3人までしか印刷できません。4人目が印刷したい場合は、誰かが使い終わるまで待つ必要があります。コンピューターの世界でも、複数のプログラムが同時に同じ資源(例えば、記憶装置の一部やプリンターなど)を使いたい場合があります。このような場合に、資源へのアクセスを整理し、秩序を守るための仕組みが「信号機」です。 信号機は、プログラムが資源を使える状態かどうかを示すカウンターのような役割を果たします。 カウンターの数字は、資源にアクセスできるプログラムの数の上限を示しています。例えば、カウンターが3であれば、同時に3つのプログラムまでが資源にアクセスできます。4つ目のプログラムは、カウンターが0になり、アクセス可能な状態になるまで待機します。プログラムが資源を使い始めると、カウンターの数字は1減ります。使い終わると、カウンターの数字は1増えます。このようにして、信号機は資源へのアクセスを制御し、複数のプログラムが同時に同じ資源にアクセスして起こる問題を防ぎます。 この仕組みにより、データが壊れたり、プログラムが誤作動したりすることを防ぎ、コンピューターシステム全体の安定性を保つことができます。 信号機には様々な種類があり、それぞれ異なる機能を持っています。 例えば、「二進信号機」はカウンターが0と1だけの単純な信号機で、資源を排他的に利用したい場合に役立ちます。「計数信号機」は、カウンターが任意の値を取り、複数のプログラムが同時に資源にアクセスできる数を制限したい場合に役立ちます。このように、信号機は目的に合わせて様々な使い方ができます。プログラムを安全かつ効率的に動作させるために、信号機は欠かせない仕組みと言えるでしょう。