外部から手続きなどを流用する場合、その安全性を確認してください。
マルチスレッドプログラムから、マルチスレッド化されていないコードをそのまま呼び出すことはできません。
マルチスレッドプログラムでは、初期スレッドからのみ「MT-安全ではない」コードに安全にアクセスできます。
これは初期スレッドに対応する静的記憶領域が、初期スレッドによってだけ使用されることを保証します。
Sun が提供するライブラリは、特に「安全ではない」と明記されていない限り安全です。
リファレンスマニュアルで「MT-安全」と明記されていなくても、その関数は安全です。「MT-安全ではない」 (MT-unsafe) 関数は、マニュアルページにその旨が明記されています。
コンパイルフラグでソースのバイナリレベルでの非互換性を吸収してください。(詳細は、第 7 章「コンパイルとデバッグ」を参照してください。)
-D_REENTRANT を使用すると、Solaris スレッド -lthread ライブラリによるマルチスレッドが有効になります。
-D_POSIX_C_SOURCE と -lpthread を使用すると、POSIX スレッドの動作になります。
-D_POSIX_PTHREADS_SEMANTICS と -lthread を使用すると、Solaris スレッドと pthread の両方のインタフェースが有効になりますが、2 つのインタフェースが衝突したときは POSIX インタフェースが優先されます。
ライブラリを「MT-安全」にする場合、プロセスの広域的な操作はスレッド化しないでください。
広域的な操作 (または広域的な副作用のある処理) をスレッド化しないでください。たとえば、ファイル入出力をスレッド単位の操作に変更しても、複数のスレッドがファイルに同時にアクセスできません。
スレッド特有の動きやスレッドとして認識される動きは、スレッド機能を使って実現してください。たとえば、main() の終了時に main() のスレッドだけを終了したい場合は、main() の最後を次のようにします。
thr_exit(); /* NOT REACHED */