//
#include "stdafx.h"
#include
#include
#include
#define nmax 10000
int sum;
int t[nmax];
#define threadCount 4
//Critical section
CRITICAL_SECTION cs;
DWORD WINAPI ThreadFunc(LPVOID lpdwParam) {
int tid = (int)lpdwParam;
int s = 0;
int i;
int dn = nmax / threadCount;
int start = tid * dn;
int stop = tid != threadCount - 1 ? (tid + 1)*dn : nmax;
for (i = start; i
EnterCriticalSection(&cs);
sum += s;
// Leave critical section
LeaveCriticalSection(&cs);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwThreadId, dwThrdParam[threadCount];
HANDLE ahThreads[threadCount];
InitializeCriticalSection(&cs);
int i, s = 0, z = 100;
for (i = 0; i
//sequential
s = 0;
int time = GetTickCount();
for (i = 0; i
time = time - GetTickCount();
std::cout << "Sequential sum time: " << s/10000 << " ticks of clock [*10000]" << std::endl;
//parallel
sum = 0;
time = GetTickCount();
for (i = 0; i
dwThrdParam[i] = i;
ahThreads[i] = CreateThread(NULL, 0, ThreadFunc, (LPVOID)dwThrdParam[i], 0, &dwThreadId);
}
for (i = 0; i
WaitForMultipleObjects(threadCount, ahThreads, true, INFINITE);
}
time = time - GetTickCount();
std::cout << std::endl;
std::cout << "Parallel sum: " << sum << std::endl;
std::cout << "Parallel sum time: " << s / 10000 << " ticks of clock [*10000]" << std::endl;
DeleteCriticalSection(&cs);
std::cin.ignore(2);
return 0;
}