Oracle® Developer Studio 12.5: C++ ユーザーズガイド

印刷ビューの終了

更新: 2016 年 7 月
 
 

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

C++ コンパイラに付属しているライブラリは、すべてマルチスレッドで使用しても安全です。マルチスレッドアプリケーションを作成したい場合や、アプリケーションをマルチスレッド化されたライブラリにリンクしたい場合は、-mt オプションを付けてプログラムのコンパイルとリンクを行う必要があります。このオプションを付けると、–D_REENTRANT がプリプロセッサに渡され、–lthreadld に正しい順番で渡されます。デフォルトでは、-mt オプションは libthreadlibCrun の前にリンクされるようにします。マクロとライブラリを指定する代わりに、簡単でエラーの発生しにくい方法として —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 ibiostreamlibCstd は、マルチスレッドに対しては安全ですが、async に対しては安全ではありません。したがって、マルチスレッドアプリケーションでは、サポートライブラリで使用できる関数をシグナルハンドラで使用しないでください。使用するとデッドロックが発生する可能性があります。

マルチスレッドアプリケーションのシグナルハンドラでは、次の機能を使用することは安全ではありません。

  • iostream

  • new 式と delete

  • 例外