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

正しい fork の選択

Solaris 10 リリースから、fork() の呼び出しは fork1() の呼び出しと等価になりました。すなわち、子プロセスには、呼び出しスレッドだけが複製されます。この動作は、POSIX の fork() の動作と同じです。

以前の Solaris ソフトウェアのリリースでは、fork() の動作は、アプリケーションが POSIX スレッドライブラリにリンクされているかどうかによって決定されていました。-lthread (Solaris スレッド) とリンクされていても -lpthread (POSIX スレッド) とリンクされていなければ、fork()forkall() と等価でした。-lpthread とリンクされていれば、-lthread とリンクされているかどうかに関係なく、fork()fork1() と等価でした。()

Solaris 10 リリースから、マルチスレッドアプリケーションには、-lthread-lpthread のどちらも不要になりました。マルチスレッドアプリケーションをコンパイルしていることを示すには、-mt オプションを使用します。どちらのアプリケーションプログラムインタフェースを使用する場合でも、標準 C ライブラリがすべてのスレッド機能を提供します。アプリケーションで、すべての fork セマンティクスを複製する必要がある場合は、forkall() を呼び出してください。