91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C++中如何使用線程池庫提高性能

c++
小樊
84
2024-09-06 10:29:59
欄目: 編程語言

在C++中,你可以使用線程池庫來管理和控制線程的創建,從而提高程序的性能

  1. 首先,確保你已經安裝了C++標準庫。對于較新的編譯器(如GCC 4.8及更高版本),線程支持是自動包含在內的。

  2. 包含所需的頭文件:

#include<iostream>
#include<thread>
#include <mutex>
#include<condition_variable>
#include<functional>
#include<queue>
#include<vector>
#include <future>
  1. 定義一個線程池類:
class ThreadPool {
public:
    ThreadPool(size_t num_threads);
    ~ThreadPool();

    void add_task(std::function<void()> task);

private:
    std::vector<std::thread> workers;
    std::queue<std::function<void()>> tasks;
    
    std::mutex queue_mutex;
    std::condition_variable condition;
    bool stop;
};
  1. 實現線程池類的構造函數、析構函數和添加任務的方法:
ThreadPool::ThreadPool(size_t num_threads) : stop(false) {
    for (size_t i = 0; i < num_threads; ++i) {
        workers.emplace_back([this] {
            while (true) {
                std::function<void()> task;
                {
                    std::unique_lock<std::mutex> lock(queue_mutex);
                    condition.wait(lock, [this] { return stop || !tasks.empty(); });
                    if (stop && tasks.empty()) return;
                    task = std::move(tasks.front());
                    tasks.pop();
                }
                task();
            }
        });
    }
}

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

void ThreadPool::add_task(std::function<void()> task) {
    {
        std::unique_lock<std::mutex> lock(queue_mutex);
        tasks.push(task);
    }
    condition.notify_one();
}
  1. 使用線程池來執行任務:
int main() {
    ThreadPool pool(4); // 創建一個包含4個線程的線程池

    std::vector<std::future<int>> results;

    for (int i = 0; i < 8; ++i) {
        results.emplace_back(pool.add_task([] {
            // 在這里執行你的任務,例如計算一個值
            int result = 0;
            // ...
            return result;
        }));
    }

    for (auto& result : results) {
        std::cout << "Result: "<< result.get()<< std::endl;
    }

    return 0;
}

這個簡單的線程池實現允許你在一個隊列中添加任意數量的任務,并將它們分發給線程池中的線程。當所有任務完成后,線程池會自動清理并關閉。

注意:這個示例代碼僅作為參考,實際應用時可能需要根據具體需求進行調整和優化。在生產環境中,建議使用成熟的線程池庫,如Boost.Asio或者Intel TBB等。

0
清河县| 石嘴山市| 竹溪县| 收藏| 新乐市| 乌拉特前旗| 新晃| 奉节县| 桂平市| 盖州市| 青海省| 唐河县| 翁牛特旗| 镇远县| 葫芦岛市| 绥江县| 苏尼特左旗| 西盟| 开封市| 黄大仙区| 溧水县| 常德市| 虎林市| 含山县| 许昌市| 安阳市| 连平县| 京山县| 盐边县| 宿迁市| 永吉县| 兰州市| 商南县| 临沂市| 玉山县| 大庆市| 金山区| 青海省| 长兴县| 仪征市| 广汉市|