Я недавно начал изучать операционные системы и создавать процессы/потоки в системе Linux с использованием языка программирования C (это то, что мы ожидаем от использования), но у меня есть некоторые проблемы с кодом, который я использую пытался написать:Многопоточность в программе C, Фибоначчи
Вот мой код, написанный на системе 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 раз нули. И главный вопрос: как я могу заставить каждый из потоков писать «только один термин» серии Фибоначчи в зависимости от количества терминов (которые в то же время количества потоков), введенных пользователем? Есть ли еще более логичный способ реализации такого рода программ?
Что означает «threadCount times zeros»? –
Обратите внимание, что для серии Фибоначчи существует замкнутое решение формы, поэтому циклы, намного меньше потоков, не нужны. –
, если threadCount равен 3, он печатает ноль три раза, например. – adropintheocean