Передача массива в качестве аргумента потока - PullRequest
0 голосов
/ 06 июня 2019

У меня есть некоторые проблемы с моим кодом. Мне нужно передать массив 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];
      }
}

Итак, у меня есть несколько вопросов:

  1. Что-то не так уже в функции потока? дает мне loc [i] = 0 для каждого i.В чем проблема?
  2. почему инициализация * int loc [SIZE] = (int *) arg; не работает?
  3. Я видел, что

    int x; int * result; ... pthread_join (someThread, & result); х = результат + результат;

это работает. Но почему? не х и типы результатов отличаются?

Спасибо за советы и желаю вам хорошего дня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...