Multithreading & Multiprocessing Homework C++
Здравейте, това ми е домашното за лекцията за нишките в C++. Когато го пусна в debug mode и сложа breakpoints там къдто изчислява времето няма проблем, но когато го пусна без breakpoints в конзолата почти винаги изписва 0. Моля дайте съвети препоръки относно кода. Приемам всякаква градивна критика.
#include <iostream>
#include <thread>
#include <time.h>
#include <mutex>
#include <math.h>
using namespace std;
unsigned long long int fibNum = 0;
unsigned long int startTicks = 0;
bool overload = false;
unsigned int i = 0;
double timePeriod = 0;
mutex mtxPrimeLock;
mutex mtxFibLock;
bool isPrimeNum(unsigned long long int x)
{
bool isPrime = false;
int sqr = (int)sqrt(x);
for (int i = sqr; i > 1; i--)
{
if (x % i == 0) { isPrime = false; break; }
else { isPrime = true; }
}
return isPrime;
}
void findPrimeNumbers()
{
unsigned long long int x = 1;
while (x <= ULLONG_MAX)
{
x++;
startTicks = clock();
if (isPrimeNum(x))
{
mtxPrimeLock.lock();
timePeriod = (double)(clock() - startTicks) / CLOCKS_PER_SEC;
cout << "Prime number: " << x << " " << timePeriod << " sec" << endl;
mtxPrimeLock.unlock();
}
}
}
int calcFibonacchi(int x)
{
if (x == 0)
return 0;
if (x == 1)
return 1;
return calcFibonacchi(x - 1) + calcFibonacchi(x - 2);
}
void printFibonacci()
{
while (overload == false)
{
i++;
startTicks = clock();
fibNum = calcFibonacchi(i);
mtxFibLock.lock();
cout <<"Fibonacci number: " << fibNum << " " << ((double)(clock() - startTicks) / CLOCKS_PER_SEC) * 1000 << " ms"<< endl;
mtxFibLock.unlock();
if (ULLONG_MAX / 2 <= fibNum)
{
overload = true;
}
}
}
int main()
{
thread threadFib(printFibonacci);
thread threadPrimeNum(findPrimeNumbers);
threadFib.join();
threadPrimeNum.join();
return 0;
}
Благодаря предварително !