Na jednoj starijoj temi sam pronašao kod i unakazio ga, zbog čega se ispricavam Ivanu D.:
#include <windows.h>
#include <stdio.h>
#include <time.h>
long double N = 300000000;
long double i1, i2;
void nit1(){
while(++i1 < N);
}
void nit2(){
while(--i2 > 0);
}
void main(){
DWORD dwTID1, dwTID2;
HANDLE trds[2];
double time1, time2;
clock_t start, finish;
i1 = 0;
i2 = N;
printf ("\nPrvo brojanje...");
start = clock();
trds[0] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)nit1, 0, 0, &dwTID1);
trds[1] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)nit2, 0, 0, &dwTID2);
WaitForMultipleObjects(2, trds, 1, INFINITE);
CloseHandle(trds[0]);
CloseHandle(trds[1]);
finish = clock();
time1 = (double)(finish - start) / CLOCKS_PER_SEC;
printf("\n...%3.3lf sec \n", time1);
printf ("\nDrugo brojanje(samo main)...");
start = clock();
while(--i1 > 0);
while(++i1 < N);
finish = clock();
time2 = (double)(finish - start) / CLOCKS_PER_SEC;
printf("\n...%3.3lf sec \n\n", time2);
}
Kako imam dvojezgreni procesor, očekivao sam barem malo brže izvršavanje prvog dijela koji paralelno mijenja vrijednosti dva brojača. Međutim, vrijeme potrebno da se izvrši prvi dio je dvostruko veće, iako u tom slučaju task manager pokazuje da su opterećene obje jezgre! Što krivo radim?
Kod sam kompajlirao sa VS6.
-- Ken Thompson