マルチスレッドのプログラミング

マルチスレッドプログラムのコンパイルとリンク

Sun Studio C コンパイラ (cc) には、マルチスレッドコードのコンパイルとリンクを行うための -mt オプションが用意されています。-mt オプションは、ライブラリの適切な順序でのリンクを保証するものです。

-mt オプションは、一貫性をもって使用する必要があります。-mt でのコンパイルとリンクを別のステップで行う場合は、リンクステップとコンパイルステップで -mt オプションを使用する必要があります。1 つの変換ユニットを -mt でコンパイルおよびリンクする場合は、そのプログラムのすべてのユニットを -mt でコンパイルおよびリンクする必要があります。

Solaris 10 リリースと Solaris 9 リリースのコンパイルとリンクには同じコマンドを使用できますが、次のいくつかの相違点を考慮するようにしてください。

POSIX スレッド環境でのコンパイルとリンク

アプリケーションで pthread のみを使用するか、または Solaris スレッドと pthread の両方を使用している場合は、次のコマンドを使用してコンパイルとリンクを行います。


cc -mt [ flag ... ] file... [ library... ] -lpthread 

-mt オプションが libthread ライブラリにリンクするに対して、-lpthread オプションは libpthread ライブラリにリンクします。libpthread によって libthread へのインタフェースが提供されるため、pthread を使用する場合は両方のフラグが必要です。

-mt オプションは、コマンド行の任意の場所に指定できます。-lpthread オプションは、ユーザーライブラリのあとに指定するようにします。-mt-lpthread の相対位置は関係ありません。

たとえば、次の行はすべて等価です。

cc -mt -o myprog f1.o f2.o   -lmylib -lpthread
cc     -o myprog f1.o f2.o -mt -lmylib -lpthread
cc     -o myprog f1.o f2.o -lmylib -mt -lpthread
cc     -o myprog f1.o f2.o -lmylib -lpthread -mt

cc コマンドのオプションの詳細については、Sun Studio cc(1) のマニュアルページおよび『Sun Studio 12: C ユーザーズガイド』を参照してください。

Solaris スレッド環境でのコンパイルとリンク

Solaris スレッド環境では、アプリケーションのコンパイルとリンク時に、次のオプションを指定します。

アプリケーションで Solaris スレッドのみを使用している場合は、次のコマンドを使用してコンパイルとリンクを行います。


cc -mt [ flag ... ] file... [ library... ]

-mt オプションは、libthread ライブラリにリンクします。

cc コマンドのオプションの詳細については、Sun Studio cc(1) のマニュアルページおよび『Sun Studio 12: C ユーザーズガイド』を参照してください。

混在スレッド環境でのコンパイルとリンク

アプリケーションで pthread と Solaris スレッドの両方の関数を使用している場合は、pthread のみのコンパイルに使用したものと同じコマンドでコンパイルとリンクを行うことができます。


cc -mt [ flag ... ] file... [ library... ] -lpthread 

混用の場合は、thread.hpthread.h の両方を組み込む必要があります。