Advertisement
Guest User

Multithread

a guest
Jul 11th, 2012
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <windows.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <time.h>
  6.  
  7. #define NTHRD 1   // broj niti
  8. #define N 10000
  9.  
  10. float a[N];
  11. long grp[NTHRD];  // granica početak
  12. long grk[NTHRD];  // granica kraj
  13. HANDLE hn[NTHRD]; // HANDLE-ovi niti
  14. long ids[NTHRD];  // ID-ovi od niti (kreću od 0,1,2,3,...)
  15. float sp[NTHRD];  // parcijalne sume
  16. volatile float sm;
  17.  
  18. DWORD WINAPI nit( VOID *p )
  19. {
  20.   int i, j; float s2;
  21.   int *id = (int *)p;
  22.   printf( "I am thread %d\n", *id );
  23.   for (i=grp[*id]; i<grk[*id]; i++)
  24.   {
  25.       s2 = 0;
  26.       for (j=0; j<N; j++) s2 = s2 + sqrt( a[j] );
  27.       sp[*id] = sp[*id] + a[i]/s2;
  28.   }
  29.   return 0;
  30. }
  31.  
  32. int main(int argc, char *argv[])
  33. {
  34.   int i,j;
  35.   float s, s2;
  36.   clock_t t1, t2;
  37.   for (i=0; i<N; i++){
  38.        srand ( time(NULL) );
  39.       a[i] = rand();
  40. }
  41.  
  42.   t1 = clock();
  43.   s = 0;
  44.   for (i=0; i<N; i++)
  45.   {
  46.       s2 = 0;
  47.       for (j=0; j<N; j++) s2 = s2 + sqrt( a[j] );
  48.       s = s + a[i]/s2;
  49.   }
  50.   t2 = clock();
  51.  
  52.   printf( "%.3f\n", s );
  53.   printf( "Time: %dms\n", t2-t1 );
  54.  
  55.   t1 = clock();
  56.   long delta = N/NTHRD;
  57.   for (i=0; i<NTHRD; i++)
  58.   {
  59.       grp[i] = delta*i;
  60.       grk[i] = delta*(i+1);
  61.       ids[i] = i;
  62.       hn[i] = CreateThread( NULL, 0, nit, &ids[i], 0, NULL );
  63.   }
  64.   WaitForMultipleObjects( NTHRD, hn, TRUE, INFINITE );
  65.   s = 0;
  66.   for (i=0; i<NTHRD; i++) s = s + sp[i];
  67.   t2 = clock();
  68.   printf( "%.3f\n", s );
  69.   printf( "Time for %d thread's: %dms\n", NTHRD, t2-t1 );
  70.   system("PAUSE");
  71.   return EXIT_SUCCESS;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement