以下を考えると:
pthread_t thread;
pthread_create(&thread, NULL, function, NULL);
正確には
pthread_create
何をしthread
ますか?thread
メインスレッドに参加して終了した後はどうなりますか?が参加した後
thread
、次の操作を行うとどうなりますか。pthread_create(&thread, NULL, another_function, NULL);
pthread_create はスレッドに対して正確に何をしますか?
thread
はオブジェクトであり、スレッドを識別する値を保持できます。成功するとpthread_create
、新しく作成されたスレッドを識別する値が入力されます。失敗した場合thread
、呼び出し後の値は未定義です。(参照: http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_create.html )
メインスレッドに参加して終了した後、スレッドはどうなりますか?
オブジェクトには何も起こりませんが、それが保持する値はスレッドを参照しなくなります (たとえば、 を受け取る関数に渡すことができなくなりpthread_t
、誤って渡すとESRCH
エラーが返される可能性があります)。
スレッドが結合した後で、次のようにするとどうなりますか。
前と同じ:pthread_create
成功した場合、新しく作成されたスレッドを識別する値が割り当てられます。
pthread_create は、OS 呼び出しを使用してスレッドを作成します。抽象化の素晴らしい点は、下で何が起こっているかを気にする必要がないことです。変数 thread を、そのスレッドを参照するために使用できる識別子に等しく設定します。たとえば、複数のスレッドがあり、そのうちの 1 つをキャンセルしたい場合は、次のように呼び出します。
pthread_cancel(スレッド)
適切な pthread_t 識別子を使用して、関心のあるスレッドを指定します。
メインスレッドに参加して終了した後、スレッドはどうなりますか?
スレッドが終了する前に、var スレッドは、スレッドを取得または識別するためのキー/インデックスとして機能します。スレッドが終了すると、キー/インデックスが指す値は有効である必要がなくなります。保存して再利用することもできますが、エラーが発生することはほぼ確実です。
スレッドが結合した後で、次のようにするとどうなりますか。
pthread_create(&thread, NULL, another_function, NULL);
thread への参照を与えるので、thread の値は作成されたばかりの新しいスレッドの識別子に設定されます。以前と同じになる可能性はあると思いますが、当てにはなりません。