Facebook
From Scribby Pudu, 5 Years ago, written in C++.
This paste is a reply to Untitled from Filip Wicha - go back
Embed
Viewing differences between Untitled and Re: Untitled
// 2.1.2.cpp : Defines the entry point for the console application.
//

#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         // Get into critical section 
        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         std::cout << "Sequential sum: " << s << std::endl;
        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;
}