スレッドセーフ

記事数:(2)

アルゴリズム

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

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

プログラムの再入可能性:複数タスクでの並行処理

プログラムを作る上で、複数の仕事が同時に舞い込んできても、それぞれの仕事をきちんと片付けられるようにすることが大切です。これを『再入可能性』と言います。再入可能性とは、一つのプログラムが複数の仕事から同時に呼ばれても、それぞれの仕事の内容をきちんと区別して、正しい順番で実行できる性質のことです。 例として、みんなで使う計算機を想像してみましょう。この計算機は、同時に複数の人が違う計算をしても、それぞれの計算結果が混ざることなく、正しく答えを出してくれる必要があります。もし、誰かが計算している途中で別の人が計算を始めたら、前の人の計算結果が変わってしまったり、間違った答えが出てしまったりしたら大変です。これが、プログラムにおける再入可能性の重要性を示す例です。 再入可能なプログラムは、それぞれの仕事に専用の場所を用意し、そこで仕事を進めていきます。他の仕事の情報が入り込んでくる心配がないので、それぞれの仕事は独立して行うことができます。これは、まるで計算機の中に小さな計算機がいくつも入っていて、それぞれが別の計算をしているようなイメージです。 特に、複数の仕事が同時に行われるような環境では、再入可能性は非常に重要です。例えば、たくさんの人が同時に同じサービスを使うような場合、プログラムが再入可能でなければ、ある人の操作が別の人に影響を与えてしまうかもしれません。このような混乱を防ぎ、システムが安定して正しく動くようにするためには、プログラムが再入可能であることが不可欠です。 つまり、再入可能性とは、プログラムが複数の仕事を抱えても、それぞれの仕事をきちんとこなし、混乱を起こさないための大切な性質なのです。