-2

これは私が疑問に思っていることです:

pthread_create() でスレッドを作成し、そのスレッドから pthread_self() を呼び出した場合、その値はメイン スレッドで pthread_create に渡す pthread_t 値と一致しますか?

//pthread_t variable
pthread_t producer_thread = (pthread_t*)malloc(sizeof(pthread_t));;

//create the thread
pthread_create(producer_thread, NULL, producer, NULL);

printf("Pthread_t variable after creating thread says %d\n", producer_thread);

....

//function passed to thread
void producer(void *p){
  printf("Pthread self says: %d\n", pthread_self());
}
4

1 に答える 1

1

pthread_self の戻り値の型は pthread_t で、これは基本的に整数型ではないポインターです。

したがって、構造体ではなく、そのアドレス (int に型キャスト) を出力していpthread_tます。

関数を使用pthread_equalして、これらの pthread_t が同じかどうかを確認できます。別のスレッドで使用することを意味します

 printf("%d\n", pthread_equal(mythreadId, pthread_self()));

それらが同じスレッドに対応していることを示すゼロ以外の数値を出力する必要があります。

それらが同じでない場合、それは問題です。

mythreadIdスポーンとは何かをスレッドに出力します。メインの pthread_t と一致する必要があります。それらが異なる場合、問題があります。

于 2013-10-30T03:59:16.723 に答える