殷德好

操作系统概念4.11linux下线程的创建

4.11 Fibonacci序列是一组:0,1,1,2,3,5,8,…… fib0=0; fib1=1; fibn=fibn-1+fibn-2; 使用phtread多线程编程程序来生成Fibonacci序列。程序应该这样工作:用户运行程序时,在命令行输入要产生Fibonaci序列数,然后程序创建一个新的线程来产生Fibonacci数,把这个序列放到线程共享的数据中(数组可能是一种最方便的数据结构)。当线程执行完成后,父线程将输出子线程产生的序列。由于在子线程结束前,父线程不能开始输出Fibonacci序列,因此,父线程需要等子线程结束

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
//创建共享数组
int len = 0;
int *array;
//线程
void *runner(void *param);

int main(int argc,char* argv[])
{
    pthread_t tid;

    if(atoi(argv[1])<0)
    {
        printf("Input must be non-negative\n");
        return -1;
    }
    //创建线程
    pthread_create(&tid,NULL,runner,argv[1]);
    //等待子线程
    pthread_join(tid,NULL);

    for(int i=0;i<len;i++)
        printf("%d ",array[i]);
    return 0;
}

void *runner(void * param)
{
    int j;
    len = atoi(param);
    if(len>2)
        array = (int *) malloc(len*sizeof(int));
    else
       array = (int *) malloc(2*sizeof(int));
    array[0] = 0;
    array[1] = 1; 
     for(j=0;j<len;j++)
        array[i] = array[j-1]+array[j-2];
    pthread_exit(0);
}

 

posted on 2020-05-12 22:47  殷德好  阅读(559)  评论(0编辑  收藏  举报

导航