スレッドは、マルチスレッドのプログラミングにおいて基本となるプログラミングインタフェースです。 [ユーザレベルのスレッドという呼称は、システムプログラマだけが関係するカーネルレベルのスレッドと区別するためのものです。このマニュアルは、アプリケーションプログラマ向けであるため、カーネルレベルのスレッドについては触れません。] スレッド は、そのプロセス内でのみ参照可能であり、アドレス空間や開いているファイルといったプロセスリソースは、すべて共有されます。スレッドごとに固有な状態としては次のものがあります。
スレッドはプロセスの命令とそのデータの大半を共有するので、あるスレッドが行なった共有データの変更は、プロセスの他のすべてのスレッドから参照できます。スレッドが自分と同じプロセス内の他のスレッドとやり取りを行う場合は、オペレーティング環境を介する必要はありません。
デフォルトでは、スレッドは軽量です。しかし、スレッドをより厳格に制御したいアプリケーションでは (たとえば、スケジューリングの方針をより厳密に適用したい場合など)、スレッドを結合できます。アプリケーションがスレッドを実行リソースに結合すると、そのスレッドはカーネルのリソースとなります (詳細は、システムスコープ (結合スレッド)を参照してください)。
以下に、ユーザーレベルのスレッドの利点を要約します。
独自のアドレス空間を生成する必要がないので、生成に伴うシステムへの負荷が小さくてすみます。
同期がカーネルレベルでなくユーザーレベルでとられるため、高速な同期が可能です。
スレッドライブラリ libpthread または libthread によって管理します。