我目前在做這個項目,我需要計算圓周率值PI值...的Windows線程API:計算與多線程
當指定只有一個線程完美的作品,我也得到3.1416 [ ...]但是當我指定解決過程中的2級或更多的線程我停下得到3.1416價值,這是我的代碼:
#include <stdio.h>
#include <time.h>
#include <windows.h>
//const int numThreads = 1;
//long long num_steps = 100000000;
const int numThreads = 2;
long long num_steps = 50000000;
double x, step, pi, sum = 0.0;
int i;
DWORD WINAPI ValueFunc(LPVOID arg){
for (i=0; i<=num_steps; i++) {
x = (i + .5)*step;
sum = sum + 4.0/(1. + x*x);
}
printf("this is %d step\n", i);
return 0;
}
int main(int argc, char* argv[]) {
int count;
clock_t start, stop;
step = 1./(double)num_steps;
start = clock();
HANDLE hThread[numThreads];
for (count = 0; count < numThreads; count++) {
printf("This is thread %d\n", count);
hThread[count] = CreateThread(NULL, 0, ValueFunc, NULL, 0, NULL);
}
WaitForMultipleObjects(numThreads, hThread, TRUE, INFINITE);
pi = sum*step;
stop = clock();
printf("The value of PI is %15.12f\n", pi);
printf("The time to calculate PI was %f seconds\n", ((double)(stop - start)/1000.0));
}
指定2個線程,當我得到這個錯誤輸出:
在這種特殊情況下,不需要同步對象:只需讓每個線程分別合計自己的部分總和,然後對每個線程的值進行求和即可。 –