Возврат массива из функции потока. - C (СИ)
Формулировка задачи:
Привет!
Создаю отдельный поток:
функцией потока - является функция arr, в которую ничего не передаю, но эта функция возвращает массив чисел - вот сама функция:
Теперь пытаюсь получить этот массив dis[] в основном потоке следующим образом:
- но в результате удается получить только первый элемента массива либо только ссылку на адрес первого элемента и никак не получается получить весь массив целиком.
Пожалуйста, подскажите в чем моя проблема?
Подскажите - большое спасибо.
pthread_create(&thread3, NULL, arr, NULL);
void *arr(void *ar) { int dis[3]={21, 23, 69}; return (void*) *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; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с потоками и стандартного ввода/вывода.
- Определение функции
allocateArray
, которая выделяет массив из 10 целых чисел с помощьюmalloc
и заполняет его значениями от 0 до 9. - Выход из функции
allocateArray
с выделенным массивом. - Создание потока с помощью
pthread_create
в функцииmain
. - Дожидаемся завершения потока с помощью
pthread_join
и сохраняем указатель на выделенный массив в переменнуюp
. - Выводим значения массива с помощью
printf
в цикле от 0 до 9. - Возвращаем 0 в функции
main
, чтобы указать на успешный исход работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д