我在C++中運行以下代碼。數組偏移量C++ pthreads返回
它按預期運行,但是,第一個結果在第二個循環中爲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,但對於其他所有我,它不是)。看起來似乎一切正常。
更正:它實際上不是偏移量,而是第一個值爲NULL,所以有一個較小的值。
你不能加入'pthread_t_array [i]',因爲它不是有效的'pthread_t'。 (你將它存儲在(不必要的)變量'x'中,而不是數組中。) – molbdnilo
@molbdnilo不知道我在想什麼。 – bordeo