C,Fibonacci程序中的多线程

时间:2016-10-24 18:34:07

标签: c linux multithreading

我刚开始使用C编程语言研究操作系统并在Linux系统上创建进程/线程(这就是我们应该使用的东西),但我在编写的代码上遇到了一些问题,我一直在努力编写:

这是我在Ubuntu系统上编写的代码:

    #include <pthread.h>
    #include <stdlib.h>
    #include <stdio.h>

    int total = 0;

   typedef struct
   {
    int start;
    int end;
    int threadNo;
   }THREAD_PARAMETERS;

  void *work(void *parameters);
  int threadCount;

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

      printf("please give the number of terms you want to diplay..");
      scanf("%d", &threadCount);

     pthread_t tid[threadCount];
     pthread_attr_t attr[threadCount];

     THREAD_PARAMETERS* lpParameter;

      int n;

    lpParameter = malloc(sizeof(THREAD_PARAMETERS)* threadCount);

    int  i=0;

    for(i=0; i<threadCount; i++)
    {
     lpParameter[i].start = 0;
     lpParameter[i].end = 1;
     lpParameter[i].threadNo = i + 1;

     pthread_attr_init(&attr[i]);
     pthread_create(&tid[i],&attr[i],work,&lpParameter[i]); 
    }

    for(i=0; i<threadCount; i++)
    {
    pthread_join(tid[i],NULL);
    }
    return 1;
    }



    void fibonacci(int a)
    {
     int  prev_term = 0, current_term = 1, next_term = 0;

     if(a==0){
     printf("%d\n",prev_term);

     }
     else if(a==1){

     next_term=current_term+prev_term;
     printf("%d\n",current_term);
     prev_term=current_term;
     current_term=next_term;

    void *work(void * parameters)
    {
    THREAD_PARAMETERS* param = (THREAD_PARAMETERS*)parameters;
    fibonacci(threadCount);
    pthread_exit(0);
    }

问题是程序使用threadCount变量计数,但程序打印的只是threadCount乘以零。 主要问题是如何让每个线程写出来#34;只有一个术语&#34; Fibonacci系列的数量取决于用户输入的术语数(同时是线程数)?还有其他更合理的方法来实现这种程序吗?

1 个答案:

答案 0 :(得分:0)

您使用while (1) { ... if(!strcmp("CREATEHALL",temp[0])) { allHalls[hallNumber] = makeHall(temp); /*<<<<<<<PROBLEM*/ hallNumber++; printf("%d\n",hallNumber); } .... free(temp); free(allHalls); // <-- there's your bug } fclose(f); free(line); 作为每个帖子lpParameter[i]的参数,但在调用work时忽略其内容。