外部から手続きなどを流用する場合、その安全性を確認してください。
マルチスレッドプログラムから、マルチスレッド化されていないコードをそのまま呼び出すことはできません。
マルチスレッドプログラムでは、初期スレッドからのみ「MT-安全ではない」コードに安全にアクセスできます。
この方法で安全でないコードを参照すれば、初期スレッドに対応する静的記憶領域が、初期スレッドによってだけ使用されることが保証されます。
ライブラリを「MT-安全」にする場合、プロセスの大域的な操作はスレッド化しないでください。
大域的な操作 (または大域的な副作用のある処理) をスレッド化しないでください。たとえば、ファイル入出力をスレッド単位の操作に変更しても、複数のスレッドがファイルに同時にアクセスできません。
スレッド特有の動きやスレッドとして認識される動きは、スレッド機能を使って実現してください。たとえば、main() の終了時に main() のスレッドだけを終了したい場合は、次のようにします。
pthread_exit(); /*NOTREACHED*/
Sun から提供されるライブラリは、「安全」であると明記されていなければ、「安全ではない」とみなされます。
リファレンスマニュアルのエントリにインタフェースが「MT-安全」であると明示的に記載されていない場合は、そのインタフェースは「安全ではない」と考えるべきです。
コンパイルフラグでソースのバイナリレベルでの非互換性を解消してください。詳細は、第 8 章コンパイルとデバッグを参照してください。
-mt を使用すると、マルチスレッドが有効になります。
-mt オプションで使用される -lpthreads は、POSIX スレッドの関数にリンクします。このフラグは、プログラムで pthread の関数を使用する場合にのみ必要です。
-mt を使用した場合は、Solaris スレッドの API が自動的にリンクされます。-lthread を明示的に指定する代わりに、常に -mt オプションを使用してください。libpthread ライブラリによって libthread へのインタフェースが提供されるため、pthread を使用する場合も libthread が引き続き必要です。