#include <iostream>
#include <random>
#include <ctime>
#include <memory>
#include <vector>
#include <mutex>
#include <future>

std::mutex lockMutex;
static int counter = 0;
void mult()
{
    std::lock_guard<std::mutex> outputLock(lockMutex);
    {
        std::cout << "Thread id : " << std::this_thread::get_id() << '\n';
        std::cout << "Counter : " << ++counter << '\n';
    }
    
    float x = rand() % 100 + (float(rand() % 100) / 100);
    float y = rand() % 100 + (float(rand() % 100) / 100);
}
int main()
{
    const int NUM_OF_TASKS = 3000;

    srand(time(0));

    std::vector<std::future<void>> vcFuts;
    vcFuts.reserve(NUM_OF_TASKS);

    for (int i = 0; i < NUM_OF_TASKS; ++i)
    {
        vcFuts.push_back(std::async(mult));
    }

    for (auto&& fut : vcFuts)
    {
        fut.get();
    }

    //char ch;
    //std::cin >> ch;
}