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

汎用 fork モデル

Solaris forkall(2) 関数は、アドレス空間とすべてのスレッドを子プロセスに複製します。アドレス空間の複製は、子プロセスで exec(2) をまったく呼び出さないが親のアドレス空間のコピーを使用する場合などに使用します。

プロセス内のあるスレッドが Solaris の forkall(2) を呼び出すと、割り込み可能なシステムコール処理中にブロックされたスレッドは EINTR を返します。

親プロセスと子プロセスの両方に保持されるようなロックは作成しないでください。MAP_SHARED フラグを指定して mmap() を呼び出すことにより、共有メモリー内にロックを割り当てると、親プロセスと子プロセスの両方に保持されるロックが生成されます。fork 1 モデルを使用すると、この問題は発生しません。