JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.2: C++ ユーザーズガイド
search filter icon
search icon

ドキュメントの情報

はじめに

パート I C++ コンパイラ

1.  C++ コンパイラの紹介

2.  C++ コンパイラの使用方法

3.  C++ コンパイラオプションの使い方

パート II C++ プログラムの作成

4.  言語拡張

5.  プログラムの編成

6.  テンプレートの作成と使用

7.  テンプレートのコンパイル

8.  例外処理

9.  プログラムパフォーマンスの改善

10.  マルチスレッドプログラムの構築

10.1 マルチスレッドプログラムの構築

10.1.1 マルチスレッドコンパイルの確認

10.1.2 C++ サポートライブラリの使用

10.2 マルチスレッドプログラムでの例外の使用

10.2.1 スレッドの取り消し

10.3 C++ 標準ライブラリのオブジェクトのスレッド間での共有

10.4 マルチスレッド環境での従来の iostream の使用

10.4.1 マルチスレッドで使用しても安全な iostream ライブラリの構成

10.4.1.1 公開変換ルーチン

10.4.1.2 マルチスレッドで使用しても安全な libC ライブラリを使用したコンパイルとリンク

10.4.1.3 マルチスレッドで使用しても安全な iostream の制約

10.4.1.4 マルチスレッドで使用しても安全なクラスのパフォーマンスオーバーヘッドの削減

10.4.2 iostream ライブラリのインタフェースの変更

10.4.2.1 新しいクラス

10.4.2.2 新しいクラス階層

10.4.2.3 新しい関数

10.4.3 大域データと静的データ

10.4.4 連続実行

10.4.5 オブジェクトのロック

10.4.5.1 stream_locker クラス

10.4.6 マルチスレッドで使用しても安全なクラス

10.4.7 オブジェクトの破棄

10.4.8 アプリケーションの例

10.5 メモリーバリアー組み込み関数

パート III ライブラリ

11.  ライブラリの使用

12.  C++ 標準ライブラリの使用

13.  従来の iostream ライブラリの使用

14.  複素数演算ライブラリの使用

15.  ライブラリの構築

パート IV 付録

A.  C++ コンパイラオプション

B.  プラグマ

用語集

索引

10.1 マルチスレッドプログラムの構築

C++ コンパイラに付属しているライブラリは、すべてマルチスレッドで使用しても安全です。マルチスレッドアプリケーションを作成したい場合や、アプリケーションをマルチスレッド化されたライブラリにリンクしたい場合は、-mt オプションを付けてプログラムのコンパイルとリンクを行う必要があります。このオプションを付けると、–D_REENTRANT がプリプロセッサに渡され、–lthreadld に正しい順番で渡されます。互換性モード (-compat[=4]) の場合、-mt オプションは libthreadlibC の前にリンクします。標準モード (デフォルトモード) の場合、-mt オプションは libthreadibCrun の前にリンクします。マクロとライブラリを指定する代わりに、より簡単でエラーの発生しにくい方法である —mt を使用することをお勧めします。

10.1.1 マルチスレッドコンパイルの確認

ldd コマンドを使用すると、アプリケーションが libthread にリンクされたかどうかを確認できます。

example% CC -mt myprog.cc
example% ldd a.out
libm.so.1 =>      /usr/lib/libm.so.1
libCrun.so.1 =>   /usr/lib/libCrun.so.1
libthread.so.1 => /usr/lib/libthread.so.1
libc.so.1 =>      /usr/lib/libc.so.1
libdl.so.1 =>     /usr/lib/libdl.so.1

10.1.2 C++ サポートライブラリの使用

C++ サポートライブラリ (libCrun ibiostreamlibCstdlibC) は、マルチスレッドで使用しても安全ですが、非同期では安全 (非同期例外で使用しても安全) ではありません。したがって、マルチスレッドアプリケーションのシグナルハンドラでは、これらのライブラリに含まれている関数を使用しないでください。使用するとデッドロックが発生する可能性があります。

マルチスレッドアプリケーションのシグナルハンドラでは、次のものは安全に使用できません。