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

溫馨提示×

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
大渡口区| 台东市| 华亭县| 盐池县| 石城县| 成都市| 大英县| 沁阳市| 永修县| 崇文区| 日土县| 石城县| 咸阳市| 吉安市| 香格里拉县| 玉环县| 遂溪县| 皮山县| 鹤岗市| 邓州市| 西乡县| 新河县| 休宁县| 增城市| 永川市| 正宁县| 花莲市| 太白县| 江孜县| 七台河市| 会同县| 宜都市| 贵阳市| 温泉县| 乌什县| 米林县| 博湖县| 桃江县| 阜南县| 彰化县| 沂源县|