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

fork() と Solaris スレッドに関する問題

Solaris スレッドと POSIX スレッドでは、fork() の動作に関する定義が異なります。fork() の問題の詳細は、「プロセスの作成 − exec(2) と exit(2) について」を参照してください。

Solaris libthread は、fork()fork1() の両方をサポートします。fork() 呼び出しは「汎用 fork」セマンティクスをもち、スレッドと LWP を含むプロセス内のすべてを複製します。つまり、親の完全なクローンを作成します。一方、fork1() 呼び出しで作成されるクローンはスレッドを 1 つしかもちません。プロセスの状態とアドレス空間は複製されますが、スレッドについては呼び出しスレッドが複製されるだけです。

POSIX libpthread は 、fork() のみをサポートします。そのセマンティクスは、Solaris スレッドにおける fork1() と同じです。

fork() のセマンティスクが「汎用 fork」と「fork1」のどちらになるかは、どちらのライブラリを使用するかで決まります。-lthread を使ってリンクすれば「汎用 fork」セマンティクス、-lpthread を使ってリンクすれば「fork1」セマンティクスになります。

詳細は、libthread または libpthread とのリンク」を参照してください。