Documentation Home
> マルチスレッドのプログラミング
マルチスレッドのプログラミング
Book Information
索引
数字・記号
A
C
D
E
F
G
I
K
L
M
N
P
R
S
T
U
V
W
X
あ
い
え
か
き
け
こ
さ
し
す
せ
そ
た
ち
つ
て
と
は
ひ
ふ
へ
ほ
ま
め
も
ゆ
よ
ら
り
れ
ろ
わ
はじめに
第 1 章 マルチスレッドの基礎
マルチスレッドに関する用語の定義
Solaris のマルチスレッドライブラリと標準
マルチスレッドの利点
アプリケーションの応答性の改善
マルチプロセッサの効率的な利用
プログラム構造の改善
システムリソースの節約
スレッドと RPC の併用
マルチスレッドの概念
並行性と並列性
マルチスレッドの構造
ユーザーレベルのスレッド
ユーザーレベルのスレッドの状態
スレッドのスケジューリング
スレッド取り消し
スレッド同期
64 ビットアーキテクチャー
第 2 章 スレッドを使った基本プログラミング
スレッドのライフサイクル
Pthreads ライブラリ
デフォルトのスレッドの生成
pthread_create の構文
pthread_create の戻り値
スレッドの終了待ち
pthread_join の構文
pthread_join の戻り値
簡単なスレッドの例
スレッドの切り離し
pthread_detach の構文
pthread_detach の戻り値
スレッド固有データキーの作成
pthread_key_create の構文
pthread_key_create の戻り値
スレッド固有データキーの削除
pthread_key_delete の構文
pthread_key_delete の戻り値
スレッド固有データの設定
pthread_setspecific の構文
pthread_setspecific の戻り値
スレッド固有データの取得
pthread_getspecific の構文
pthread_getspecific の戻り値
スレッド固有データの大域性と局所性の例
スレッド識別子の取得
pthread_self の構文
pthread_self の戻り値
スレッド識別子の比較
pthread_equal の構文
pthread_equal の戻り値
スレッドの初期化ルーチンの呼び出し
pthread_once の構文
pthread_once の戻り値
スレッドの実行明け渡し
sched_yield の構文
sched_yield の戻り値
スレッドの方針およびスケジューリングパラメータの設定
pthread_setschedparam の構文
pthread_setschedparam の戻り値
スレッドの方針およびスケジューリングパラメータの取得
pthread_getschedparam の構文
pthread_getschedparam の戻り値
スレッド優先順位の設定
pthread_setschedprio の構文
pthread_setschedprio の戻り値
スレッドへのシグナルの送信
pthread_kill の構文
pthread_kill の戻り値
呼び出しスレッドのシグナルマスクのアクセス
pthread_sigmask の構文
pthread_sigmask の戻り値
安全な fork
pthread_atfork の構文
pthread_atfork の戻り値
スレッドの終了
pthread_exit Syntax
pthread_exit の戻り値
スレッド終了処理の完了
スレッドの取り消し
取り消しポイント
取り消しポイントの配置
スレッドの取り消し
pthread_cancel の構文
pthread_cancel の戻り値
取り消しを有効または無効にする
pthread_setcancelstate の構文
pthread_setcancelstate の戻り値
取り消しタイプの設定
pthread_setcanceltype の構文
pthread_setcanceltype の戻り値
取り消しポイントの設定
pthread_testcancel の構文
pthread_testcancel の戻り値
スタックへハンドラをプッシュする
pthread_cleanup_push の構文
pthread_cleanup_push の戻り値
スタックからハンドラを取り出す
pthread_cleanup_pop の構文
pthread_cleanup_pop の戻り値
第 3 章 スレッドの属性
属性オブジェクト
属性の初期化
pthread_attr_init の構文
pthread_attr_init の戻り値
属性の削除
pthread_attr_destroy の構文
pthread_attr_destroy の戻り値
切り離し状態の設定
pthread_attr_setdetachstate(3C) の構文
pthread_attr_setdetachstate の戻り値
切り離し状態の取得
pthread_attr_getdetachstate の構文
pthread_attr_getdetachstate の戻り値
スタックガードのサイズの設定
pthread_attr_setguardsize(3C) の構文
pthread_attr_setguardsize の戻り値
スタックガードのサイズの取得
pthread_attr_getguardsize の構文
pthread_attr_getguardsize の戻り値
スコープの設定
pthread_attr_setscope の構文
pthread_attr_setscope の戻り値
スコープの取得
pthread_attr_getscope の構文
pthread_attr_getscope の戻り値
スレッドの多重度の設定
pthread_setconcurrency の構文
pthread_setconcurrency の戻り値
スレッドの多重度の取得
pthread_getconcurrency の構文
pthread_getconcurrency の戻り値
スケジューリングポリシーの設定
pthread_attr_setschedpolicy(3C) の構文
pthread_attr_setschedpolicy の戻り値
スケジューリングポリシーの取得
pthread_attr_getschedpolicy の構文
pthread_attr_getschedpolicy の戻り値
継承スケジューリングポリシーの設定
pthread_attr_setinheritsched の構文
pthread_attr_setinheritsched の戻り値
継承スケジューリングポリシーの取得
pthread_attr_getinheritsched の構文
pthread_attr_getinheritsched の戻り値
スケジューリングパラメータの設定
pthread_attr_setschedparam の構文
pthread_attr_setschedparam の戻り値
スケジューリングパラメータの取得
pthread_attr_getschedparam の構文
指定の優先順位をもつスレッドを生成する
優先順位を設定したスレッドの生成例
pthread_attr_getschedparam の戻り値
スタックについて
スレッドへのスタック空間の割り当て
独自のスタックを構築する
スタックサイズの設定
pthread_attr_setstacksize の構文
pthread_attr_setstacksize の戻り値
スタックサイズの取得
pthread_attr_getstacksize の構文
pthread_attr_getstacksize の戻り値
スタックアドレスとサイズの設定
pthread_attr_setstack(3C) の構文
pthread_attr_setstack(3C) の戻り値
スタックアドレスとサイズの取得
pthread_attr_getstack の構文
pthread_attr_getstack の戻り値
第 4 章 同期オブジェクトを使ったプログラミング
相互排他ロック属性
mutex 属性オブジェクトの初期化
pthread_mutexattr_init の構文
pthread_mutexattr_init の戻り値
mutex 属性オブジェクトの削除
pthread_mutexattr_destroy の構文
pthread_mutexattr_destroy の戻り値
mutex のスコープ設定
pthread_mutexattr_setpshared の構文
pthread_mutexattr_setpshared の戻り値
mutex のスコープの値の取得
pthread_mutexattr_getpshared の構文
pthread_mutexattr_getpshared の戻り値
mutex の型属性の設定
pthread_mutexattr_settype の構文
pthread_mutexattr_settype の戻り値
mutex の型属性の取得
pthread_mutexattr_gettype の構文
pthread_mutexattr_gettype の戻り値
mutex 属性のプロトコルの設定
pthread_mutexattr_setprotocol の構文
pthread_mutexattr_setprotocol の戻り値
mutex 属性のプロトコルの取得
pthread_mutexattr_getprotocol の構文
pthread_mutexattr_getprotocol の戻り値
mutex 属性の優先順位上限の設定
pthread_mutexattr_setprioceiling の構文
pthread_mutexattr_setprioceiling の戻り値
mutex 属性の優先順位上限の取得
pthread_mutexattr_getprioceiling の構文
pthread_mutexattr_getprioceiling の戻り値
mutex の優先順位上限の設定
pthread_mutex_setprioceiling の構文
pthread_mutex_setprioceiling の戻り値
mutex の優先順位上限の取得
pthread_mutex_getprioceiling の構文
pthread_mutex_getprioceiling の戻り値
mutex の堅牢度属性の設定
pthread_mutexattr_setrobust_np の構文
pthread_mutexattr_setrobust_np の戻り値
mutex の堅牢度属性の取得
pthread_mutexattr_getrobust_np の構文
pthread_mutexattr_getrobust_np の戻り値
相互排他ロックの使用方法
mutex の初期化
pthread_mutex_init の構文
pthread_mutex_init の戻り値
mutex の整合性保持
pthread_mutex_consistent_np の構文
pthread_mutex_consistent_np の戻り値
mutex のロック
pthread_mutex_lock の構文
pthread_mutex_lock の戻り値
mutex のロック解除
pthread_mutex_unlock の構文
pthread_mutex_unlock の戻り値
ブロックしないで行う mutex のロック
pthread_mutex_trylock の構文
pthread_mutex_trylock の戻り値
指定した絶対時間までの mutex のロック
pthread_mutex_timedlock() の構文
pthread_mutex_timedlock() の戻り値
指定した時間間隔内の mutex のロック
pthread_mutex_reltimedlock_np() の構文
pthread_mutex_reltimedlock_np() の戻り値
mutex の削除
pthread_mutex_destroy の構文
pthread_mutex_destroy の戻り値
mutex ロックのコード例
ロック階層の使用例
片方向リンクリストの入れ子のロック
循環リンクリストの入れ子のロック
スピンロックの使用
スピンロックの初期化
pthread_spin_init() の構文
pthread_spin_init() の戻り値
スピンロックの獲得
pthread_spin_lock() の構文
pthread_spin_lock() の戻り値
非ブロックスピンロックの獲得
pthread_spin_trylock() の構文
pthread_spin_trylock() の戻り値
スピンロックの解除
pthread_spin_unlock() の構文
pthread_spin_unlock() の戻り値
スピンロックの削除
pthread_spin_destroy() の構文
pthread_spin_destroy() の戻り値
条件変数の属性
条件変数の属性の初期化
pthread_condattr_init の構文
pthread_condattr_init の戻り値
条件変数の属性の削除
pthread_condattr_destroy の構文
pthread_condattr_destroy の戻り値
条件変数のスコープの設定
pthread_condattr_setpshared の構文
pthread_condattr_setpshared の戻り値
条件変数のスコープの取得
pthread_condattr_getpshared の構文
pthread_condattr_getpshared の戻り値
クロック選択条件変数の設定
pthread_condattr_setclock の構文
pthread_condattr_setclock の戻り値
クロック選択条件変数の取得
pthread_condattr_getclock の構文
pthread_condattr_getclock の戻り値
条件変数の使用方法
条件変数の初期化
pthread_cond_init の構文
pthread_cond_init の戻り値
条件変数によるブロック
pthread_cond_wait の構文
pthread_cond_wait の戻り値
1 つのスレッドのブロック解除
pthread_cond_signal の構文
pthread_cond_signal の戻り値
時刻指定のブロック
pthread_cond_timedwait の構文
pthread_cond_timedwait の戻り値
間隔指定のブロック
pthread_cond_reltimedwait_np の構文
pthread_cond_reltimedwait_np の戻り値
全スレッドのブロック解除
pthread_cond_broadcast の構文
pthread_cond_broadcast の戻り値
条件変数の削除
pthread_cond_destroy の構文
pthread_cond_destroy の戻り値
「呼び起こし忘れ」問題
「生産者 / 消費者」問題
セマフォーによる同期
名前付きセマフォーと名前なしセマフォー
計数型セマフォーの概要
セマフォーの初期化
sem_init の構文
プロセス間スコープでセマフォーを初期化する
プロセス間スコープでセマフォーを初期化する
sem_init の戻り値
セマフォーの加算
sem_post の構文
sem_post の戻り値
セマフォーの値によるブロック
sem_wait の構文
sem_wait の戻り値
セマフォーの減算
sem_trywait の構文
sem_trywait の戻り値
セマフォーの削除
sem_destroy の構文
sem_destroy の戻り値
「生産者 / 消費者」問題—セマフォーを使った例
読み取り/書き込みロック属性
読み取り/書き込みロック属性の初期化
pthread_rwlockattr_init の構文
pthread_rwlockattr_init の戻り値
読み取り/書き込みロック属性の削除
pthread_rwlockattr_destroy の構文
pthread_rwlockattr_destroy の戻り値
読み取り/書き込みロック属性の設定
pthread_rwlockattr_setpshared の構文
pthread_rwlockattr_setpshared の戻り値
読み取り/書き込みロック属性の取得
pthread_rwlockattr_getpshared の構文
pthread_rwlockattr_getpshared の戻り値
読み取り/書き込みロックの使用
読み取り/書き込みロックの初期化
pthread_rwlock_init の構文
pthread_rwlock_init の戻り値
読み取り/書き込みロックの読み取りロックの獲得
pthread_rwlock_rdlock の構文
pthread_rwlock_rdlock の戻り値
指定した絶対時間までの読み取り/書き込みロックの読み取りロックの獲得
pthread_rwlock_timedrdlock の構文
pthread_rwlock_timedrdlock の戻り値
読み取り/書き込みロックの非ブロック読み取りロックの獲得
pthread_rwlock_tryrdlock の構文
pthread_rwlock_tryrdlock の戻り値
読み取り/書き込みロックの書き込みロックの獲得
pthread_rwlock_wrlock の構文
pthread_rwlock_wrlock の戻り値
読み取り/書き込みロックの非ブロック書き込みロックの獲得
pthread_rwlock_trywrlock の構文
pthread_rwlock_trywrlock の戻り値
指定した絶対時間までの読み取り/書き込みロックの書き込みロックの獲得
pthread_rwlock_timedwrlock の構文
pthread_rwlock_timedwrlock の戻り値
読み取り/書き込みロックの解除
pthread_rwlock_unlock の構文
pthread_rwlock_unlock の戻り値
読み取り/書き込みロックの削除
pthread_rwlock_destroy の構文
pthread_rwlock_destroy の戻り値
バリアー同期の使用
同期バリアーの初期化
pthread_barrier_init() の構文
pthread_barrier_init() の戻り値
バリアーで同期をとるためのスレッドの待機
pthread_barrier_wait() の構文
pthread_barrier_wait() の戻り値
同期バリアーの削除
pthread_barrier_destroy の構文
pthread_barrier_destroy の戻り値
バリアー属性オブジェクトの初期化
pthread_barrierattr_init() の構文
pthread_barrierattr_init() の戻り値
バリアーのプロセス共有の属性の設定
pthread_barrierattr_setpshared() の構文
pthread_barrierattr_setpshared() の戻り値
バリアーのプロセス共有の属性の取得
pthread_barrierattr_getpshared() の構文
pthread_barrierattr_getpshared() の戻り値
バリアー属性オブジェクトの削除
pthread_barrierattr_destroy() の構文
pthread_barrierattr_destroy() の戻り値
プロセスの境界を越えた同期
「生産者 / 消費者」問題の例
プリミティブの比較
第 5 章 Solaris ソフトウェアを使ったプログラミング
プロセスの生成時の fork の問題
fork1 モデル
fork1 モデルにおける安全性の問題とその解決策
仮想 fork–vfork
解決策: pthread_atfork
汎用 fork モデル
正しい fork の選択
プロセスの作成: exec と exit の問題
タイマー、アラーム、およびプロファイル
タイマー
アラーム
マルチスレッドプログラムのプロファイリング
大域ジャンプ: setjmp と longjmp
リソースの制限
LWP とスケジューリングクラス
タイムシェアスケジューリング
リアルタイムスケジューリング
公平配分スケジューリング
固定優先順位スケジューリング
シグナルの拡張
同期シグナル
非同期シグナル
継続セマンティクス法
シグナルに関する操作
スレッドのシグナルマスクの設定
特定のスレッドへのシグナルの送信
特定のシグナルの待機
特定のシグナルを指定された時間だけ待機
スレッド指定シグナル
完了セマンティクス法
シグナルハンドラと「非同期シグナル安全」
条件変数上で割り込まれた待機
入出力の問題
遠隔手続き呼び出しとしての入出力
非同期性の管理
非同期入出力
非同期入出力操作
入出力操作の完了の待機
共有入出力と新しい入出力システムコール
getc と putc の代替
第 6 章 Solaris スレッドを使ったプログラミング
Solaris スレッドと POSIX スレッドの API の比較
API の主な相違点
関数比較表
Solaris スレッドに固有の関数
スレッド実行の停止
thr_suspend の構文
thr_suspend の戻り値
停止しているスレッドの再開
thr_continue の構文
thr_continue の戻り値
pthread に相当するものがある同期関数 — 読み取り/書き込みロック
読み取り/書き込みロックの初期化
rwlock_init の構文
プロセス内スコープでの読み取り/書き込みロックの初期化
プロセス間スコープでの読み取り/書き込みロックの初期化
rwlock_init の戻り値
読み取りロックの獲得
rw_rdlock の構文
rw_rdlock の戻り値
読み取りロックの獲得の試行
rw_tryrdlock の構文
rw_tryrdlock の戻り値
書き込みロックの獲得
rw_wrlock の構文
rw_wrlock の戻り値
書き込みロックの獲得の試行
rw_trywrlock の構文
rw_trywrlock の戻り値
読み取り/書き込みロックの解除
rw_unlock の構文
rw_unlock の戻り値
読み取り/書き込みロックの削除
rwlock_destroy の構文
rwlock_destroy の戻り値
Solaris スレッドに類似した関数
スレッドの生成
thr_create の構文
thr_create の戻り値
最小のスタックサイズの取得
thr_min_stack の構文
thr_min_stack の戻り値
スレッド識別子の獲得
thr_self の構文
thr_self の戻り値
スレッドの実行明け渡し
thr_yield の構文
thr_yield の戻り値
スレッドへのシグナルの送信
thr_kill の構文
thr_kill の戻り値
呼び出しスレッドのシグナルマスクのアクセス
thr_sigsetmask の構文
thr_sigsetmask の戻り値
スレッドの終了
thr_exit の構文
thr_exit の戻り値
スレッドの終了待ち
thr_join の構文
thr_join、指定したスレッドの終了待ち
thr_join、任意のスレッドの終了待ち
thr_join の戻り値
スレッド固有データ用キーの作成
thr_keycreate の構文
thr_keycreate の戻り値
スレッド固有データの値の設定
thr_setspecific の構文
thr_setspecific の戻り値
スレッド固有データの値の取得
thr_getspecific の構文
thr_getspecific の戻り値
スレッド優先順位の設定
thr_setprio の構文
thr_setprio の戻り値
スレッド優先順位の取得
thr_getprio の構文
thr_getprio の戻り値
pthread に相当するものがある同期関数 — 相互排他ロック
mutex の初期化
mutex_init(3C) の構文
プロセス内スコープでの mutex
プロセス間スコープでの mutex
プロセス間スコープの確実な mutex
mutex_init の戻り値
mutex の削除
mutex_destroy の構文
mutex_destroy の戻り値
mutex の獲得
mutex_lock の構文
mutex_lock の戻り値
mutex の解除
mutex_unlock の構文
mutex_unlock の戻り値
mutex の獲得の試行
mutex_trylock の構文
mutex_trylock の戻り値
pthread に相当するものがある同期関数 — 条件変数
条件変数の初期化
cond_init の構文
プロセス内スコープでの条件変数
プロセス間スコープでの条件変数
cond_init の戻り値
条件変数の削除
cond_destroy の構文
cond_destroy の戻り値
条件変数によるブロック
cond_wait の構文
cond_wait の戻り値
条件変数による指定時刻付きブロック
cond_timedwait の構文
cond_timedwait の戻り値
時間間隔によるブロック
cond_reltimedwait の構文
cond_reltimedwait の戻り値
特定のスレッドのブロック解除
cond_signal の構文
cond_signal の戻り値
全スレッドのブロック解除
cond_broadcast の構文
cond_broadcast の戻り値
pthread に相当するものがある同期関数 — セマフォー
セマフォーの初期化
sema_init の構文
プロセス内スコープでのセマフォー
プロセス間スコープでのセマフォー
sema_init の戻り値
セマフォーの加算
sema_post の構文
sema_post の戻り値
セマフォーの値によるブロック
sema_wait の構文
sema_wait の戻り値
セマフォーの減算
sema_trywait の構文
sema_trywait の戻り値
セマフォーの削除
sema_destroy(3C) の構文
sema_destroy(3C) の戻り値
プロセスの境界を越えた同期
「生産者 / 消費者」問題の例
fork() と Solaris スレッドに関する問題
第 7 章 安全なインタフェースと安全ではないインタフェース
スレッド安全
マルチスレッドインタフェースの安全レベル
安全でないインタフェースのための再入可能な関数
Solaris スレッドでの「非同期シグナル安全」関数
ライブラリの「MT-安全」レベル
「スレッド安全ではない」ライブラリ
第 8 章 コンパイルとデバッグ
マルチスレッドアプリケーションを開発するための Solaris 環境の設定
マルチスレッドアプリケーションのコンパイル
コンパイルの準備
スレッドの選択 — Solaris または POSIX
<thread.h> または <pthread.h>
マルチスレッドプログラムのコンパイルとリンク
POSIX スレッド環境でのコンパイルとリンク
Solaris スレッド環境でのコンパイルとリンク
混在スレッド環境でのコンパイルとリンク
リンク時の POSIX セマフォー用 -lrt の指定
代替スレッドライブラリ
マルチスレッドプログラムのデバッグ
マルチスレッドプログラムでよく起こるミス
DTrace による追跡とデバッグ
Performance Analyzer によるプロファイリング
Thread Analyzer を使用したデータの競合およびデッドロックの検出
dbx の使用
TNF ユーティリティーによる追跡とデバッグ
truss の使用
mdb の使用
第 9 章 プログラミング上の指針
大域変数の考慮
静的局所変数の利用
スレッドの同期
シングルスレッド化
再入可能な関数
コードロック
データロック
不変式とロック
デッドロックの回避
スケジューリングに関するデッドロック
ロックに関する指針
デッドロックの検出
マルチスレッドコードの基本的な指針
スレッドの生成と使用
マルチプロセッサへの対応
アーキテクチャー
共有メモリー型のマルチプロセッサ
Peterson のアルゴリズム
共有メモリー型の並列コンピュータでのループの並列化
スレッドプログラムの例
参考資料
付録 A 拡張の例: スレッドプールの実装
スレッドプールについて
スレッドプールの例について
スレッドプールの関数
thr_pool_create()
thr_pool_queue()
thr_pool_wait()
thr_pool_destroy()
スレッドプールのコード例
thr_pool.h ファイル
thr_pool.c ファイル
スレッドプールの例が示している内容
© 2010, Oracle Corporation and/or its affiliates