gpt4 book ai didi

c - C 中的多线程,斐波那契数列

转载 作者:行者123 更新时间:2023-11-30 21:08:08 25 4
gpt4 key购买 nike

我最近开始学习操作系统并使用 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 乘以零。主要问题是如何使每个线程根据用户输入的项数(同时也是线程数)写入斐波那契数列的“仅一项”?还有其他更合乎逻辑的方式来实现这种程序吗?

最佳答案

您使用 lpParameter[i] 作为每个线程的 work 的参数,但在调用 fibonacci 时忽略其内容。

关于c - C 中的多线程,斐波那契数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40225175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com