У меня есть некоторые проблемы с моим кодом. Мне нужно передать массив int потоку, который вычислит ^ 2 каждого int массива.
Мой код:
#include <pthread.h> //etc.
#define SIZE 1024
static void * function_thread(void *arg){
int *loc = (int *)arg;
// i tried also int loc[SIZE] = (int *)arg; but won' compile ion' t know why
for (int i = 0; i < SIZE; i++) {
loc[i] = loc[i] * loc[i];
// tried also loc[i] = (*(int *)arg) * (*(int *)arg);
printf("loc[%d]^2 = %d\n",i, loc[i]);
}
return (void *)loc;
}
int main(int argc, char const *argv[]) {
int x[SIZE];
void (*res[SIZE]);
int y[SIZE];
for (int i = 0; i < SIZE; i++) {
x[i] = i;
}
pthread_t thread_1;
pthread_create(&thread_1,NULL,function_thread,x);
pthread_join(thread_1, &res);
for(int i = 0; i < SIZE; i++){
y[i] = res[i];
}
}
Итак, у меня есть несколько вопросов:
- Что-то не так уже в функции потока? дает мне loc [i] = 0 для каждого i.В чем проблема?
- почему инициализация * int loc [SIZE] = (int *) arg; не работает?
Я видел, что
int x;
int * result;
...
pthread_join (someThread, & result);
х = результат + результат;
это работает. Но почему? не х и типы результатов отличаются?
Спасибо за советы и желаю вам хорошего дня!