Я хотел бы вычислить математическое суммирование в c с помощью потоков. (Σx^i, От 0 до N). Каждый поток должен вычислять каждый член суммирования и, наконец, в основном программа должна суммировать их все и печатать. Как я могу сделать число потоков динамически? Вот мой код:Как получить динамическое число потоков в C
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <math.h>
pthread_t sadaf[10];
int i,a[10];
long int x,N;
int sum=0;
pthread_mutex_t mtx;
void *Myfun(void *tid)
{
int *ThreadID=(int *)tid;
pthread_mutex_lock(&mtx);
printf("The thread with id of %d calculated x^i\n",*ThreadID);
a[*ThreadID]=pow(x,*ThreadID);
sum=sum+a[*ThreadID];
pthread_mutex_unlock(&mtx);
}
int main()
{
int d[10] = {0};
printf("->**************************************************************************<-\n");
printf("This program will calculate the following function:\n-> ∑x^i ,From 0 to N \n");
printf("->**************************************************************************<-\n");
printf("Please enter x:\n");
scanf("%ld",&x);
printf("Please enter N:\n");
scanf("%ld",&N);
for (i=0; i<N; i++)
{
d[i] = i;
pthread_create(&sadaf[i],NULL,Myfun,(void *)&d[i]);
}
for (i=0; i<N; i++)
{
pthread_join(sadaf[i],NULL);
}
printf("The sum is: %d\n",sum);
}
Ваши массивы (* все * из них) имеют пространство для десяти элементов. Если вы вводите 'N', который равен или больше десяти, вы выйдете за пределы и получите * неопределенное поведение *. –
Одна из тех простых вещей, которую нужно запомнить: если у вас размер жесткого кодированного размера, вы, вероятно, ошибаетесь. – Voo
Если вы используете переменную для ваших циклов, которые определены в области файлов, вы определенно попрошайничать. – Gerhardh