在C++中,你可以使用線程池庫來管理和控制線程的創建,從而提高程序的性能
首先,確保你已經安裝了C++標準庫。對于較新的編譯器(如GCC 4.8及更高版本),線程支持是自動包含在內的。
包含所需的頭文件:
#include<iostream>
#include<thread>
#include <mutex>
#include<condition_variable>
#include<functional>
#include<queue>
#include<vector>
#include <future>
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;
};
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();
}
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等。