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

溫馨提示×

C++中如何利用線程池庫進行任務調度

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

在 C++ 中,可以使用線程池庫來進行任務調度。這里我們將介紹一個簡單的線程池庫,并展示如何使用它來調度任務。

首先,需要安裝線程池庫。在 Ubuntu 系統下,可以通過以下命令安裝:

sudo apt-get install libboost-all-dev

接下來,創建一個名為 thread_pool.cpp 的文件,然后編寫以下代碼:

#include<iostream>
#include<boost/asio.hpp>
#include<boost/bind.hpp>
#include<boost/thread.hpp>

class ThreadPool {
public:
    ThreadPool(size_t num_threads) : work_(io_service_) {
        for (size_t i = 0; i < num_threads; ++i) {
            threads_.create_thread(boost::bind(&boost::asio::io_service::run, &io_service_));
        }
    }

    ~ThreadPool() {
        io_service_.stop();
        threads_.join_all();
    }

    template<typename F>
    void enqueue(F f) {
        io_service_.post(f);
    }

private:
    boost::asio::io_service io_service_;
    boost::asio::io_service::work work_;
    boost::thread_group threads_;
};

void task1() {
    std::cout << "Task 1 is running in thread "<< boost::this_thread::get_id()<< std::endl;
}

void task2() {
    std::cout << "Task 2 is running in thread "<< boost::this_thread::get_id()<< std::endl;
}

int main() {
    ThreadPool pool(4); // 創建一個包含 4 個線程的線程池

    pool.enqueue(task1); // 將任務 1 添加到線程池
    pool.enqueue(task2); // 將任務 2 添加到線程池

    return 0;
}

在這個例子中,我們創建了一個名為 ThreadPool 的類,它使用 boost::asio::io_serviceboost::thread_group 來管理線程。ThreadPool 類提供了一個 enqueue 方法,用于將任務添加到線程池。

我們定義了兩個簡單的任務 task1task2,并在 main 函數中創建了一個包含 4 個線程的線程池。然后,我們將這兩個任務添加到線程池中。

要編譯這個程序,請使用以下命令:

g++ -o thread_pool thread_pool.cpp -lboost_system -lboost_thread -pthread

最后,運行生成的可執行文件:

./thread_pool

輸出結果類似于:

Task 1 is running in thread 140396678533888
Task 2 is running in thread 140396678533376

這表明任務已經在線程池中的線程上運行。

0
贵阳市| 盐城市| 辉县市| 中西区| 桐乡市| 镇远县| 中宁县| 晋江市| 彭泽县| 青岛市| 怀宁县| 阳江市| 玉山县| 富裕县| 凉城县| 黑山县| 社会| 汉川市| 伊宁县| 文登市| 左贡县| 焉耆| 扶绥县| 晋州市| 宽城| 耿马| 峨眉山市| 广南县| 安岳县| 连州市| 茌平县| 阿尔山市| 突泉县| 合阳县| 武定县| 九江县| 武功县| 萍乡市| 鲁甸县| 五大连池市| 都安|