Возврат массива из функции потока. - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет! Создаю отдельный поток:
pthread_create(&thread3, NULL, arr, NULL);
функцией потока - является функция arr, в которую ничего не передаю, но эта функция возвращает массив чисел - вот сама функция:
void *arr(void *ar)
{
int dis[3]={21, 23, 69};
return (void*) *dis;
}
Теперь пытаюсь получить этот массив dis[] в основном потоке следующим образом:
int r;
pthread_join(thread3, (void**) &r);
- но в результате удается получить только первый элемента массива либо только ссылку на адрес первого элемента и никак не получается получить весь массив целиком. Пожалуйста, подскажите в чем моя проблема? Подскажите - большое спасибо.

Решение задачи: «Возврат массива из функции потока.»

textual
Листинг программы
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
 
void *allocateArray(void *t)
{
   int *a = (int*)malloc(10*sizeof(int));
   int i = 0;
   for(;i<10;++i)
      a[i] = i;
 
   pthread_exit((void *) a);
}
 
int main (int argc, char *argv[])
{
   pthread_t t;
   int i, *p;
   pthread_create(&t, NULL, allocateArray, 0);
   pthread_join(t, (void **)&p);
 
   for(i=0;i<10;++i)
      printf("%d ", p[i]);
 
   return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с потоками и стандартного ввода/вывода.
  2. Определение функции allocateArray, которая выделяет массив из 10 целых чисел с помощью malloc и заполняет его значениями от 0 до 9.
  3. Выход из функции allocateArray с выделенным массивом.
  4. Создание потока с помощью pthread_create в функции main.
  5. Дожидаемся завершения потока с помощью pthread_join и сохраняем указатель на выделенный массив в переменную p.
  6. Выводим значения массива с помощью printf в цикле от 0 до 9.
  7. Возвращаем 0 в функции main, чтобы указать на успешный исход работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы