1
pthread_t single_thread ;
pthread_create (&single_thread , NULL , &mywriter , 0) ;
void * ignore ;
pthread_join (single_thread , &ignore) ;

私は上記のコードを持っていますが、void *を定義する目的は何ですか?無視して結合しますか?使用中にセグメンテーション違反が発生します。

4

3 に答える 3

2

2 番目の引数のポイントは、スレッドから返される引数を取得することです。

終了コードのようなもの。ただし、これは返すオブジェクトのアドレスでもある可能性があるvoid**ため、void*. 署名を見ると、実際にvoid**は関数が期待するものであり、それに渡しています。

あなたがそれを必要としないなら、私はあなたの場合だと思います。通り過ぎるだけnull

NULL 以外の value_ptr 引数を指定した pthread_join() 呼び出しの成功から戻ると、終了スレッドによって pthread_exit() に渡された値は、value_ptr によって参照される場所で使用可能になります。

男: pthread_join

于 2012-05-10T07:27:56.777 に答える
1

の主な目的はpthread_join、呼び出しスレッドを呼び出されたスレッドと同期させることです。呼び出しスレッドは、呼び出されたスレッドが終了するまで中断されます。

たとえば、pthread_createメイン関数から呼び出してスレッドを作成します。スレッドが終了するのを待たない場合、メインの関数/プロセスが終了するため、ジョブが完了したかどうかに関係なく、作成されたスレッドも一緒に強制終了されます。

また、コメントに記載されているように、 aNULLを の 2 番目のパラメーターとして渡すことができますpthread_join。初期化されていないポインターを使用すると、通常、セグメンテーション違反が発生します。また、ポインタignoreである(逆参照)をどのように使用できたのですか?voidあなたがキャストされている可能性がありますか?

于 2012-05-10T07:09:19.327 に答える
1

pthread_join の目的は、「作成されたスレッドを呼び出し元のスレッドに参加させる」ことです...これにより、プロセスがメインの閉じ中括弧から外れる前にスレッドが実行されるようになります.....

例えば:

//code
#include <stdio.h>
#include <pthread.h>
void *func(void *arg)
{
printf ("inside the thread %d\n",pthread_self());
return NULL;
}

int main (void)
{
pthread_t tid;

pthread_create (&tid,NULLm func,NULL);

pthread_join (tid,NULL);

return 0;
}
于 2012-05-10T07:05:55.817 に答える