Exemple #1
0
    TaskHandle enqueueTask(const Task::TaskFunction& function, const ProblemSpace& problemSpace) {
        Task task(function, problemSpace);
        std::unique_lock<std::mutex> lock(m_queueMutex);
        m_tasks.emplace(std::move(task));
        TaskHandle handle(m_tasks.back());
        m_queueSemaphore.notify();

        if (!m_running) {
            for (unsigned int i = 0; i < std::thread::hardware_concurrency(); i++) {
                m_threads.emplace_back(std::bind(&ThreadPool::threadFunction, this));
            }

            m_running = true;
        }

        return handle;
    }