亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
景洪市| 大洼县| 陆良县| 鄂尔多斯市| 岢岚县| 方山县| 申扎县| 石门县| 南通市| 泗阳县| 周至县| 德清县| 积石山| 寻甸| 大英县| 咸宁市| 垣曲县| 札达县| 呼玛县| 五指山市| 曲阜市| 西乡县| 苏尼特右旗| 钦州市| 班戈县| 辛集市| 通道| 柳河县| 龙泉市| 彭泽县| 无棣县| 开封县| 峡江县| 江阴市| 溧水县| 报价| 昭通市| 会理县| 铜山县| 石景山区| 东兰县|