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