【发布时间】:2018-09-11 05:20:37
【问题描述】:
我正在开发一个函数,该函数创建一个线程并将斐波那契数列计算为某个用户输入的值。例如,如果用户输入5,则输出将是:0 1 1 2 3 5
但是,序列必须在创建的线程中计算,并且必须在线程退出后打印出结果。
我可以创建线程并计算序列,但我需要使用pthread_exit 和pthread_join 将数组fibSequence[] 传递回原始线程。我无法弄清楚语法,并且找不到任何人通过数组的示例。
到目前为止我所拥有的:
我创建了一个由新创建的线程调用的函数fib_runner()。斐波那契数列被创建并放入数组fibSequence[]。我需要将它传递回主函数。我是暂时打印出函数中的序列,但是应该在main中打印出来。
谢谢!
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void* fib_runner(void* arg)
{
int *limit_ptr = (int*) arg;
int limit = *limit_ptr;
int fibSequence[limit];
int size = sizeof(fibSequence)/sizeof(fibSequence[0]);
printf("Size: %d\n", size);
fibSequence[0] = 0;
fibSequence[1] = 1;
for (int i = 2; i <= size; i++)
{
fibSequence[i] = fibSequence[i-1] + fibSequence[i-2];
}
for (int i = 0; i <= size; i++)
{
printf("%d ", fibSequence[i]);
}
pthread_exit(0);
}
int main(int argc, char **argv)
{
int limit;
printf("Enter Number: ");
scanf("%d", &limit);
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&tid, &attr, fib_runner, &limit);
pthread_join(tid, NULL);
}
【问题讨论】:
标签: c linux multithreading unix pthreads