ozimas

PO zad. 2.1

Jan 20th, 2017
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdlib.h>
  3. #include <Windows.h>
  4. #include <stdio.h>
  5.  
  6. int suma;
  7. int t[10000];
  8.  
  9. CRITICAL_SECTION cs;
  10.  
  11. DWORD WINAPI ThreadFunc(LPVOID lpdwParam) {
  12.     int tid = (int)lpdwParam;
  13.     int s = 0;
  14.     int i;
  15.     int dn = 10000 / 4;
  16.     int start = tid*dn;
  17.     int stop = tid != 4 - 1 ? (tid + 1)*dn : 10000;
  18.  
  19.     for (i = start; i<stop; i++) s += t[i];
  20.     EnterCriticalSection(&cs);
  21.     suma += s;
  22.     LeaveCriticalSection(&cs);
  23.     return 0;
  24. }
  25.  
  26. int _tmain(int argc, _TCHAR* argv[])
  27. {
  28.     DWORD dwThreadId, dwThrdParam[4];
  29.     HANDLE ahThreads[4];
  30.  
  31.     InitializeCriticalSection(&cs);
  32.  
  33.     int i, s = 0, z = 100;
  34.     for (i = 0; i<10000; i++) t[i] = rand() % z;
  35.  
  36.     s = 0;
  37.     for (i = 0; i<10000; i++) s += t[i];
  38.     printf("Suma wyliczona w watku 1: %d\n", s);
  39.  
  40.     suma = 0;
  41.  
  42.     for (i = 0; i<4; i++)
  43.     {
  44.         dwThrdParam[i] = i;
  45.         ahThreads[i] = CreateThread(NULL, 0, ThreadFunc, (LPVOID)dwThrdParam[i], 0, &dwThreadId);
  46.     }
  47.  
  48.     for (i = 0; i<4; i++)
  49.     {
  50.         WaitForSingleObject(ahThreads[i], INFINITE);
  51.     }
  52.     printf("Suma  wyliczona w watku 2: %d\n", suma);
  53.  
  54.     DeleteCriticalSection(&cs);
  55.     system("pause");
  56.     return 0;
  57. }
Add Comment
Please, Sign In to add comment