在 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_service
和 boost::thread_group
來管理線程。ThreadPool
類提供了一個 enqueue
方法,用于將任務添加到線程池。
我們定義了兩個簡單的任務 task1
和 task2
,并在 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
這表明任務已經在線程池中的線程上運行。