マルチスレッドのプログラミングは、Solaris® オペレーティングシステム (Solaris OS) で使用される POSIXTM スレッドと Solaris スレッドに対応した、マルチスレッドのプログラミングインタフェースの解説書です。このマニュアルでは、アプリケーションを作成するプログラマを対象に、マルチスレッドを使った新しいプログラムの作成方法と、既存のプログラムをマルチスレッド化する方法を説明します。
このマニュアルでは、POSIX スレッドと Solaris スレッドの両方のインタフェースを扱っていますが、ほとんどの説明は POSIX スレッドを想定して書かれています。Solaris スレッドだけに適用される情報については、第 6 章Solaris スレッドを使ったプログラミングで説明しています。この 2 組のインタフェースは共通の実装を共有しており、互いに完全に互換性があります。POSIX スレッドインタフェースの呼び出しは、Solaris スレッドインタフェースの呼び出しと自由に混在させることができます。
POSIX スレッドについては、Single UNIX Specification Version 3 (http://www.opengroup.org/) を参照してください。
このリリースでは、SPARC® および x86 系列のプロセッサアーキテクチャー (UltraSPARC®、SPARC64、AMD64、Pentium、Xeon EM64T) を使用するシステムをサポートします。サポートされるシステムについては、Solaris 10 Hardware Compatibility List (http://www.sun.com/bigadmin/hcl) を参照してください。本書では、プラットフォームにより実装が異なる場合は、それを特記します。
本書では、「x86」という用語は AMD64 あるいは Intel Xeon/Pentium 製品系列 と互換性のあるプロセッサを使用して製造された 32 ビットおよび 64 ビットシ ステムを意味します。 サポートされるシステムについては、Solaris 10 Hardware Compatibility List を参照してください。
このマニュアルは、マルチスレッドを使った新しいプログラムを作成するか、または既存のプログラムをマルチスレッド化しようとしているアプリケーション開発者を対象にしています。
このマニュアルを使用する開発者は、次のテクノロジに精通し、使いこなせる必要があります。
UNIX® SVR4 システム - 現在の Solaris リリースであることが望ましい
C プログラミング言語 - マルチスレッドインタフェースは標準 C ライブラリによって提供される
並行または並列プログラミングの原理 (逐次プログラミングと対照する原理として)
第 1 章マルチスレッドの基礎では、このリリースにおけるスレッドの実装の構造的な概要について説明します。
第 2 章スレッドを使った基本プログラミングでは、デフォルトの属性をもつスレッドの作成方法を中心に、一般的な POSIX スレッドルーチンについて説明します。
第 3 章スレッドの属性では、デフォルト以外の属性をもつスレッドの生成方法を説明します。
第 4 章同期オブジェクトを使ったプログラミングでは、スレッドの同期ルーチンについて説明します。
第 5 章Solaris ソフトウェアを使ったプログラミングでは、マルチスレッドをサポートするためにオペレーティング環境に加えられた変更を説明します。
第 6 章Solaris スレッドを使ったプログラミングでは、Solaris スレッド (POSIX スレッドと対比して) のインタフェースについて説明します。
第 7 章安全なインタフェースと安全ではないインタフェースでは、マルチスレッドの安全性に関する問題を説明します。
第 8 章コンパイルとデバッグでは、マルチスレッド対応のアプリケーションのコンパイルとデバッグの基礎を説明します。
第 9 章プログラミング上の指針では、マルチスレッドアプリケーションを作成するプログラマに関係する問題について説明します。
付録 A 拡張の例: スレッドプールの実装では、ワークスレッドのプールの実装方法について説明します。
このマニュアルでは、Sun 以外の URL を挙げ、関連する補足情報を示す場合があります。
このマニュアルで説明する Sun 以外の Web サイトの利用については、Sun は責任を負いません。こうしたサイトやリソース上の、またはこれらを通じて利用可能な、コンテンツ、広告、製品、その他の素材について、Sun は推奨しているわけではなく、Sun はいかなる責任も負いません。こうしたサイトやリソース上の、またはこれらを経由して利用可能な、コンテンツ、製品、サービスを利用または信頼したことに伴って発生した (あるいは発生したと主張される) いかなる損害や損失についても、Sun は一切の責任を負いません。
Sun の Web サイトでは、次の追加のリソースに関する情報を提供しています。
マルチスレッド化では、さまざまな点から、関数の対話について考慮する必要があります。以下に、推奨する参考文献を紹介します。
『Concurrent Programming』、Alan Burns、Geoff Davies 共著 (Addison-Wesley, 1993)
『Distributed Algorithms and Protocols』、Michel Raynal 著 (Wiley, 1988)
『オペレーティングシステムの概念 (I、II)』、シルバーシャッツ、ピーターソン著、宇都宮・福田訳、培風館、原典『Operating System Concepts』、Silberschatz、Peterson、Galvin (Addison-Wesley, 1991)
『Principles of Concurrent Programming』、M. Ben-Ari 著 (Prentice-Hall, 1982)
『Programming with Threads』(Steve Kleiman、Devang Shah、Bart Smaalders 共著 (Prentice-Hall, 1996)
『 Programming with POSIX Threads』、David R. Butenhof 著 (Addison-Wesley Professional, 1997)
このマニュアルでは、次のような字体や記号を特別な意味を持つものとして使用します。
表 P–1 表記上の規則
字体または記号 |
意味 |
例 |
|
---|---|---|---|
AaBbCc123 |
コマンド名、ファイル名、ディレクトリ名、画面上のコンピュータ出力、コード例を示します。 |
.login ファイルを編集します。 ls -a を使用してすべてのファイルを表示します。 system% |
|
AaBbCc123 |
ユーザーが入力する文字を、画面上のコンピュータ出力と区別して示します。 |
system% su password: |
|
AaBbCc123 |
変数を示します。実際に使用する特定の名前または値で置き換えます。 |
ファイルを削除するには、rm filename と入力します。 |
|
『 』 |
参照する書名を示します。 |
『コードマネージャ・ユーザーズガイド』を参照してください。 |
|
「 」 |
参照する章、節、ボタンやメニュー名、強調する単語を示します。 |
第 5 章「衝突の回避」を参照してください。 この操作ができるのは、「スーパーユーザー」だけです。 |
|
\ |
枠で囲まれたコード例で、テキストがページ行幅を超える場合に、継続を示します。 |
|
コード例は次のように表示されます。
C シェル
machine_name% command y|n [filename] |
C シェルのスーパーユーザー
machine_name# command y|n [filename] |
Bourne シェルおよび Korn シェル
$ command y|n [filename] |
Bourne シェルおよび Korn シェルのスーパーユーザー
# command y|n [filename] |
[ ] は省略可能な項目を示します。上記の例は、filename は省略してもよいことを示しています。
| は区切り文字 (セパレータ) です。この文字で分割されている引数のうち 1 つだけを指定します。
キーボードのキー名は英文で、頭文字を大文字で示します (例: Shift キーを押します)。ただし、キーボードによっては Enter キーが Return キーの動作をします。
ダッシュ (-) は 2 つのキーを同時に押すことを示します。たとえば、Ctrl-D は Control キーを押したまま D キーを押すことを意味します。