Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdio.h"
- #include "unistd.h"
- #include "pthread.h"
- #include "stdlib.h"
- #include "errno.h"
- #include "limits.h"
- #include "math.h"
- #include "semaphore.h"
- pthread_mutex_t mut[11];
- //Funkcja obliczająca rekurencyjnie n-tą liczbę Fibonacciego
- double wyrazEx(double x, unsigned int i);
- void *threadEx(void *arg);
- double silnia (double n)
- {
- if (n <= 1) return 1;
- else return n*silnia(n-1);
- }
- struct argsForThread{
- double x;
- unsigned int i;
- };
- double result = 0.0;
- int nrWatku = 0;
- int main()
- {
- double x = 5;
- struct argsForThread argumenty[10];
- double suma = 0.0;
- pthread_t threadId[10];
- pthread_attr_t attrs;
- for(int i = 0; i < 11; i++)
- pthread_mutex_init(&mut[i], NULL);
- pthread_attr_init(&attrs);
- //pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED );
- printf("Podaj X:\n");
- scanf("%lf", &x);
- for(int i = 1; i<11; i++)
- pthread_mutex_lock(&mut[i]);
- for(int i = 0; i < 10; i++)
- {
- argumenty[i].x = x;
- argumenty[i].i = i;
- pthread_create(&threadId[i], &attrs, threadEx, &argumenty[i]);
- pthread_detach(threadId[i]);
- }
- for(int i = 0; i < 10; i++)
- {
- pthread_mutex_lock(&mut[0]);
- suma += result;
- printf("a%d = %f\n", nrWatku, result);
- pthread_mutex_unlock(&mut[nrWatku+1]);
- }
- printf("Suma = %f\n", suma);
- printf("exp(%f) = %f\n", x, exp(x));
- }
- double wyrazEx(double x, unsigned int i)
- {
- double wynik = pow(x, i) / (double)silnia(i);
- return wynik;
- }
- void *threadEx(void *arg)
- {
- struct argsForThread *argptr = (struct argsForThread*) arg;
- int num = argptr->i;
- double wynik = wyrazEx(argptr->x, argptr->i);
- pthread_mutex_lock(&mut[num]);
- nrWatku = num;
- result = wynik;
- pthread_mutex_unlock(&mut[0]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement