中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
永济市| 阿拉善盟| 彝良县| 临桂县| 城固县| 华阴市| 志丹县| 镇平县| 五寨县| 垫江县| 巨野县| 香港| 文安县| 榕江县| 新干县| 丁青县| 讷河市| 德钦县| 邯郸市| 广昌县| 夹江县| 叶城县| 鄂托克前旗| 大庆市| 金坛市| 闵行区| 灌南县| 淅川县| 扬州市| 泗洪县| 延寿县| 新绛县| 东乡族自治县| 铜山县| 喀喇沁旗| 南昌县| 龙泉市| 灵寿县| 紫阳县| 郎溪县| 酉阳|