私はC++で次のコードを実行しています。配列オフセットC++ pthreads戻り値
期待どおりに実行されますが、最初の結果は2番目のforループでNULLになりますが、それ以降の結果はすべて正しいです。
pthread_t pthread_t_array[thread_count];
int ireturn[thread_count];
float chunk_elements[thread_count];
for (int i = 0; i < thread_count; i++)
{
float vector_chunk[3] = {2.0,4.0,3.0};
pthread_t x;
pthread_t_array[i] = x;
ireturn[i] = pthread_create(&x,NULL,worker,(void *) vector_chunk);
}
for (int i = 0; i < thread_count; i++)
{
void * result;
ireturn[i] = pthread_join(pthread_t_array[i],&result);
// THE LINES BELOW: AT i = 0, result = NULL
// however, at every other value of i, 14 is returned as expected.
if (result != NULL){
chunk_elements[i] = *(float *) result;
}
free(result);
}
フルコードはhereです。
結果がNULLの場合はテストする行に配列オフセットがあります(i = 0、結果はNULLですが、他のすべてのiではそうではありません)。すべてが正しく行われているようです。
訂正:実際にはオフセットではなく、最初の値はNULLであるため、1つ少ない値があります。
'pthread_t_array [i]'は有効な 'pthread_t'ではないため、参加できません。 (あなたは配列の中ではなく、(不要な)変数 'x'にそれを格納しました) – molbdnilo
@molbdnilo私が何を考えているのか分かりません。 – bordeo