SHARE
TWEET

pthread - sumowanie od 0 do 2012

kofii12345 Mar 24th, 2013 7 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
Top