マルチスレッド

プログラム

セマフォ:並列処理の秩序を守る

- セマフォとはセマフォとは、複数のプログラムの一部が同時に共通のリソースにアクセスしようとする場合に、秩序を保ち、問題発生を防ぐための仕組みです。レストランを例に考えてみましょう。レストランの座席数は限られており、満席時には新しいお客さんは席が空くまで待たなければなりません。セマフォは、まさにこのレストランの入り口に置かれた案内板のような役割を果たします。案内板には空席数が表示されており、お客さんはその数字を見て入店できるかどうかを判断します。もし、空席数が0であれば満席のため、席が空くまで待つ必要があります。セマフォも同様に、共通のリソースにアクセスできる数を示すカウンターのような役割を担います。プログラムはセマフォの値を確認し、アクセス可能な状態であればカウンターを減らしてリソースにアクセスします。そして、使用が完了したらカウンターを増やして、他のプログラムが利用できるようにします。このように、セマフォは複数のプログラムが安全かつ効率的に共通のリソースにアクセスすることを可能にするための重要な仕組みと言えるでしょう。
プログラム

システム停止の罠!デッドロックを理解する

- デッドロックとは複数のプログラムが同時に動作するコンピュータの世界では、プログラムはそれぞれが作業を進めるために必要な資源(データや処理能力など)を利用します。しかし、複数のプログラムが必要な資源を互いに握ったまま、相手に譲らず待ってしまう状態が発生することがあります。これが「デッドロック」と呼ばれる現象です。デッドロックは、例えるなら、交差点で車が同時に進入し、譲り合いの結果、身動きが取れなくなってしまう状況に似ています。どの車も交差点を通過するために、他の車が道を譲る必要がありますが、どの車も譲ろうとしないため、膠着状態に陥ってしまうのです。プログラムの世界では、この「車」は「プロセス」に、「交差点」は「共有資源」に置き換えられます。例えば、二つのプログラムAとBがあるとします。プログラムAはデータXを使用するためにロックをかけ、その後データYを使おうとします。同時に、プログラムBはデータYをロックし、その後データXを使おうとします。この時、プログラムAはプログラムBがデータYを解放するのを待ち、プログラムBはプログラムAがデータXを解放するのを待つ状態になります。このように、お互いに相手が資源を解放するのを待ち続ける状態がデッドロックであり、放置すると永遠に処理が進まなくなる可能性があります。デッドロックはシステムの処理能力を著しく低下させるため、プログラム設計の段階でデッドロックが発生しないように注意深く設計する必要があります。
error: Content is protected !!