kofii12345

pthread - sumowanie od 0 do 2012

Mar 24th, 2013
13
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <pthread.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. using namespace std;
  9.  
  10. int suma;
  11. const int NUM_OF_THREADS = 7;
  12.  
  13. pthread_mutex_t myMutex = PTHREAD_MUTEX_INITIALIZER;
  14. pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
  15.  
  16. void* sumuj(void* arg)
  17. {
  18.     pthread_mutex_lock(&myMutex);
  19.     int* przedzial = (int*)arg;
  20.     //cout<<przedzial[0]<<endl<<przedzial[1]<<endl<<endl;
  21.     for(int i=przedzial[0]; i <przedzial[1]; i++)
  22.     {
  23.         suma = suma + i;
  24.     }
  25.     pthread_mutex_unlock(&myMutex);
  26.  
  27.     return arg;
  28. }
  29.  
  30. void rownolegle()
  31. {
  32.     pthread_t threads[NUM_OF_THREADS];
  33.     int ids[NUM_OF_THREADS];
  34.     int przedzial[NUM_OF_THREADS+1];
  35.  
  36.     for(int i = 0; i<NUM_OF_THREADS; i++)
  37.     {
  38.         przedzial[i] = i*(2012/NUM_OF_THREADS);
  39.     }
  40.     przedzial[NUM_OF_THREADS] = 2012;
  41.  
  42.     for(int i = 0; i<NUM_OF_THREADS; i++)
  43.     {
  44.         ids[i] = pthread_create(&threads[i], NULL, sumuj, (void*)&przedzial[i]);
  45.     }
  46.  
  47.     for(int i = 0; i<NUM_OF_THREADS; i++)
  48.     {
  49.         ids[i] = pthread_join(threads[i], NULL);
  50.     }
  51.  
  52.     cout<<"ROWNOLEGLE - \tsuma:\t"<<suma<<endl;
  53. }
  54.  
  55. void nieRownolegle()
  56. {
  57.     suma = 0;
  58.     for(int i=0; i <2012; i++)
  59.     {
  60.         suma = suma + i;
  61.     }
  62.     cout<<"NIEROWNOLEGLE -\tsuma:\t"<<suma<<endl;
  63. }
  64.  
  65. int main()
  66. {
  67.     rownolegle();
  68.  
  69.     nieRownolegle();
  70.  
  71.     system("pause");
  72. }
RAW Paste Data