Возврат массива из функции потока. - 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, чтобы указать на успешный исход работы программы.