#include #include #include #include #include "FifoQueue.hpp" #include "Map.hpp" #include "computePi.hpp" void threadWorker(std::uint16_t threadNum, FifoQueue* threadSafeQueue, Map* threadSafeMap) { while(!threadSafeQueue->empty()){ int index = threadSafeQueue->front(); threadSafeQueue->pop(); unsigned int piDigit = computePiDigit(index); threadSafeMap->safeInsert(index, piDigit); std::cout << "."; std::cout.flush(); } } int main() { FifoQueue* threadSafeQueue = new FifoQueue(); Map* threadSafeMap = new Map(); for(int i = 1; i <= 1000; i++){ threadSafeQueue->push(i); } // // Make as many threads as there are CPU cores // Assign them to run our threadWorker function, and supply arguments as necessary for that function std::vector> threads; for (std::uint16_t core = 0; core < std::thread::hardware_concurrency(); core++) // The arguments you wish to pass to threadWorker are passed as // arguments to the constructor of std::thread threads.push_back(std::make_shared(threadWorker, core, threadSafeQueue, threadSafeMap)); // // Wait for all of these threads to complete for (auto&& thread : threads) thread->join(); std::cout << std::endl << std::endl << "3."; for(int i = 1; i <= 1000; i++){ std::cout << threadSafeMap->find(i); } return 0; }