Advertisement
LazySenpai

zad1

Nov 24th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.27 KB | None | 0 0
  1. #include <pthread.h>
  2. #include <math.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #define N 10
  7.  
  8. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  9. double sum=0;
  10. typedef struct {
  11. int x;
  12. int i;
  13. }argument;
  14.  
  15. int silnia(int n) {
  16.     if (n == 0) return 1;
  17.     if (n == 1) return 1;
  18.     return n*silnia(n-1);
  19. }
  20.  
  21. void* obliczIloczyn(void* ptr)
  22. {
  23.     argument* arg = ptr;
  24.     int dol = silnia(arg->i);    
  25.     double gora = pow((double)arg->x,(double)arg->i);
  26.     //printf("gora: %f\n",gora);
  27.     //printf("dol: %d\n",dol);
  28.     double dziel = (double)gora / (double)dol;
  29.     double* suma = malloc(sizeof(double));
  30.     *suma = dziel;
  31.    
  32.     pthread_mutex_lock(&mutex);
  33.    
  34.     sum+=*suma;
  35.    
  36.     pthread_mutex_unlock(&mutex);
  37.    
  38.     printf("suma: %f\n",*suma);
  39.     //mutex[arg->i] = (pthread_mutex_t)*suma;
  40. }
  41.  
  42. int main()
  43. {
  44.    
  45.     double* result[N];
  46.     int i;
  47.     pthread_t watki[N];
  48.     for(i=0;i<N;i++)
  49.     {
  50.         argument* arg= malloc(sizeof(argument));
  51.         arg->x = 1;
  52.         arg->i = i;
  53.         pthread_create(&watki[i], NULL, obliczIloczyn, arg);
  54.         usleep(300);
  55.        
  56.        
  57.     }
  58.     for(i=0;i<N;i++)
  59.     {
  60.         pthread_detach(watki[i]);
  61.     }
  62.    
  63.     printf("Wynik: %f\n",sum);
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement