1

私は構造体を持っています

typedef struct something_t {
    int a;
    int b;
} VALUES;

私のスレッド関数では

VALUES values;
values.a = 10;
values.b = 11;

pthread_exit((void*)&values);

そして、私はすることによって受け取ろうとします

VALUES values;
pthread_join(thread, (void*)&values);
printf("A: %d\B: %d\n", values.a, values.b);

私が受け取る値は毎回変です。スレッドで作成した値を受け取る方法について混乱しています。Cでスレッドを学習しようとしていて、それを把握したようですが、値を返すことができません。方法はありますか?誰の助けにも感謝します。

4

4 に答える 4

6

スタック (ローカル) 変数を返そうとしています。

スレッドが終了すると、スレッドのスタックが削除される (または少なくとも無効になる) ため、これは許可されておらず、機能しません。

これを修正するには:

VALUES *values = malloc(sizeof VALUES);
values->a = 1;
values->b = 2;
pthread_exit( values );

そして、自由に参加すると、値が

VALUES *res;
pthread_join( thread, &res );
...
free(res);
于 2012-10-14T22:37:03.760 に答える
1

スレッド関数でスタック オブジェクトを作成し、それを で使用しているようですpthread_exit。スレッド関数が終了すると、その構造体はスコープ外になり、ゴミが残ります。

に渡した値構造体を使用していませんpthread_join

于 2012-10-14T22:36:40.850 に答える
1

スタック (および終了したスレッドのスタック) で構造体を宣言したため、アプリケーションには未定義の動作があります。

malloc代わりに使用してください:

VALUES *values = malloc(sizeof(VALUES);
values->a = 10;
values->b = 11;

pthread_exit(values);
于 2012-10-14T22:37:20.500 に答える