以下是一个简单的C++线程池管理程序的示例:

#include <iostream>
#include <thread>
#include <vector>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <functional>

class ThreadPool {
public:
    ThreadPool(size_t numThreads) {
        for (size_t i = 0; i < numThreads; i++) {
            threads.emplace_back(
                [this] {
                    while (true) {
                        std::function<void()> task;
                        {
                            std::unique_lock<std::mutex> lock(this->mutex);
                            this->condition.wait(lock, [this] { return this->stop || !this->tasks.empty(); });
                            if (this->stop && this->tasks.empty())
                                return;
                            task = std::move(this->tasks.front());
                            this->tasks.pop();
                        }
                        task();
                    }
                }
            );
        }
    }

    ~ThreadPool() {
        {
            std::unique_lock<std::mutex> lock(mutex);
            stop = true;
        }
        condition.notify_all();
        for (std::thread &worker : threads)
            worker.join();
    }

    template<class F>
    void enqueue(F&& f) {
        {
            std::unique_lock<std::mutex> lock(mutex);
            tasks.emplace(std::forward<F>(f));
        }
        condition.notify_one();
    }

private:
    std::vector<std::thread> threads;
    std::queue<std::function<void()>> tasks;
    std::mutex mutex;
    std::condition_variable condition;
    bool stop = false;
};

int main() {
    ThreadPool pool(4);
    std::vector<std::future<int>> results;

    for (int i = 0; i < 8; i++) {
        results.emplace_back(
            pool.enqueue([i] {
                std::cout << "Thread " << std::this_thread::get_id() << " working on task " << i << std::endl;
                std::this_thread::sleep_for(std::chrono::seconds(1));
                std::cout << "Thread " << std::this_thread::get_id() << " finished task " << i << std::endl;
                return i * i;
            })
        );
    }

    for (auto &&result : results)
        std::cout << result.get() << ' ';
    std::cout << std::endl;

    return 0;
}

此程序创建一个线程池,可以将函数作为任务提交给线程池来执行。在这个示例中,线程池有4个线程,将8个任务提交给线程池来执行。每个任务都简单地打印一些信息并休眠1秒钟,然后返回任务编号的平方。最后,程序将等待所有任务完成,并打印每个任务的结果。

该程序使用C++11中的标准线程库和标准库容器(例如std::thread,std::vector和std::queue)。它还使用std::function和std::future,这些都是C++11中的新功能,用于支持通用函数和异步编程。

C++ 线程池管理程序

原文地址: https://www.cveoy.top/t/topic/b4Jg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录