まつもとさん wrote:

> |ちなみに、The Single UNIX (R) Specification, Version 2 を調べてみると、
> |fork(2) はまさに fork_and_kill_other_threads のような動作をするようで
> |す。
>
> というは重要なヒントだと思います。手元のpthreadで実験してみ
> たら確かにそのような動作をします。

机の上から発掘された手もとの本「Pスレッドプログラミング」の
第 200 ページに次の文章があります。

  システムコールの新しいセマンティクス
    …
  新しいプロセスの fork

fork()の古い定義によれば、カーネルは完全にプロセス全体を
複写することになっています。スレッドの場合、「すべてのス
レッドとLWPを複写するのか?」という疑問が浮かびます。
fork()の最も一般的な使い方はそのあとすぐにexec()を呼び出
すことです。この場合、スレッドとLWP(注1)を複写するという
努力のすべては無駄になってしまいます。したがって、fork()
を定義するには2つの方法が可能です。fork1セマンティクスで
は、呼び出し側スレッドだけしか複写されません。forkallセ
マンティクスでは、すべてのスレッドとLWPが複写されます。
POSIXは、fork1セマンティクスを持つようにfork()(およびす
べての変形)を定義することに決めました。UIスレッド(注2)は
forkallセマンティクスを選びました。

(注1) LWP
  Solaris 2 で言うところの LWP。
  この本は元は Solaris スレッドの本で、改訂されて POSIX スレッドの本に
  なったので、Solaris を前提にした記述も多い。
(注2) UIスレッド
  「POSIX 委員会が作業を終える前に SunSoft が Solaris 2 を開発する上で
    使用したライブラリ。Solaris スレッド。」
  とのこと。
  pthread_なんとか、ではなくて thr_なんとか、という
  Solaris ネイティブなスレッドシステムを指すんでしょう。


SHUDO Kazuyuki/首藤一幸   私をたばねないで あらせいとうの花のように
  shudoh / muraoka.info.waseda.ac.jp