c++线程池代码
    线程池是一种常用的多线程编程技术,在高并发的场景下可以提高程序运行效率。下面是一个简单的C++线程池实现代码示例。
    首先需要定义一个任务类,表示线程池要执行的任务。任务类中可以包含一个函数指针,用于执行具体的任务。
    ```c++
    class Task {
    public:
    Task(void (*func)(void*), void* arg) : m_func(func), m_arg(arg) {}
    void execute() { m_func(m_arg); }
thread技术    private:
    void (*m_func)(void*);
    void* m_arg;
    };
    ```
    接下来定义线程池类,其中包含一个任务队列和一组工作线程。
    ```c++
    class ThreadPool {
    public:
    ThreadPool(int thread_count) : m_stop(false) {
    for (int i = 0; i < thread_count; ++i) {
    place_back([this] {
    while (!m_stop) {
    std::unique_lock<std::mutex> lock(m_mutex);
    m_condition.wait(lock, [this] { return m_stop || !pty(); });
    if (m_stop && pty()) return;
    auto task = std::move(m_tasks.front());
    m_tasks.pop();
    lock.unlock();
    ute();
    }
    });
    }
    }
    ~ThreadPool() {
    {
    std::unique_lock<std::mutex> lock(m_mutex);
    m_stop = true;
    }
    ify_all();
    for (auto& thread : m_threads) {
    thread.join();
    }
    }
    template <typename F, Args>
    void addTask(F&& f, Args&&... args) {
    auto task = std::make_shared<Task>(std::bind(std::forward<F>(f), std::forward<Args>(args)...));
    std::unique_lock<std::mutex> lock(m_mutex);
    place([task] { task->execute(); });
    lock.unlock();
    ify_one();
    }
    private:
    std::vector<std::thread> m_threads;
    std::queue<std::function<void()>> m_tasks;
    std::mutex m_mutex;
    std::condition_variable m_condition;
    bool m_stop;
    };
    ```
    在上面的代码中,线程池的构造函数会初始化一组指定数量的工作线程,并启动它们,每个线程会不断地从任务队列中获取任务并执行,直到线程池被销毁。
    线程池的析构函数会先将m_stop标志设置为true,然后通知所有线程退出,最后等待所有线程执行完毕。
    线程池提供了一个addTask方法,用于向任务队列中添加新的任务。这个方法使用了可变
参数模板和std::bind函数,可以将任意类型的函数和参数绑定为一个任务对象,然后添加到任务队列中。
    这个线程池实现比较简单,可以满足基本的需求,但还有一些不足之处,比如没有考虑线程池中线程的数量动态调整、任务队列的容量限制等问题,需要根据实际情况进行改进。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。