ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: C++ ユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
C++ コンパイラに付属しているライブラリは、すべてマルチスレッドで使用しても安全です。マルチスレッドアプリケーションを作成したい場合や、アプリケーションをマルチスレッド化されたライブラリにリンクしたい場合は、-mt オプションを付けてプログラムのコンパイルとリンクを行う必要があります。このオプションを付けると、–D_REENTRANT がプリプロセッサに渡され、–lthread が ld に正しい順番で渡されます。デフォルトでは、-mt オプションは libthread が ibCrun の前にリンクされるようにします。マクロとライブラリを指定する代わりに、簡単でエラーの発生しにくい方法として —mt を使用することをお勧めします。
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
C++ サポートライブラリ libCrun、 ibiostream、libCstd は、マルチスレッドに対しては安全ですが、async に対しては安全ではありません。したがって、マルチスレッドアプリケーションでは、サポートライブラリで使用できる関数をシグナルハンドラで使用しないでください。使用するとデッドロックが発生する可能性があります。
マルチスレッドアプリケーションのシグナルハンドラでは、次の機能を使用することは安全ではありません。
iostream
new 式と delete 式
例外