做网站打广告图片素材,北京网站建设认知,烟台网站定制排名,opencms wordpress线程池可以有效地管理和重用线程资源#xff0c;避免频繁创建和销毁线程带来的开销。以下是一个简单的线程池示例。
cpp
#include iostream
#include vector
#include thread
#include queue
#include mutex
#include condition…线程池可以有效地管理和重用线程资源避免频繁创建和销毁线程带来的开销。以下是一个简单的线程池示例。
cpp
#include iostream
#include vector
#include thread
#include queue
#include mutex
#include condition_variable
#include functionalclass ThreadPool {
public:ThreadPool(size_t numThreads);~ThreadPool();void enqueue(std::functionvoid() func);private:std::vectorstd::thread workers;std::queuestd::functionvoid() tasks;std::mutex queueMutex;std::condition_variable condition;bool stop;void worker();
};ThreadPool::ThreadPool(size_t numThreads) : stop(false) {for (size_t i 0; i numThreads; i) {workers.emplace_back([this] { this-worker(); });}
}ThreadPool::~ThreadPool() {{std::unique_lockstd::mutex lock(queueMutex);stop true;}condition.notify_all();for (std::thread worker : workers) {worker.join();}
}void ThreadPool::enqueue(std::functionvoid() func) {{std::unique_lockstd::mutex lock(queueMutex);tasks.push(func);}condition.notify_one();
}void ThreadPool::worker() {while (true) {std::functionvoid() task;{std::unique_lockstd::mutex lock(queueMutex);condition.wait(lock, [this] { return this-stop || !this-tasks.empty(); });if (this-stop this-tasks.empty()) return;task std::move(this-tasks.front());this-tasks.pop();}task();}
}// 示例使用
void exampleTask(int n) {std::cout Task n is being processed by thread std::this_thread::get_id() std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));
}int main() {ThreadPool pool(4); // 创建具有4个线程的线程池for (int i 0; i 10; i) {pool.enqueue([i] { exampleTask(i); });}在这里插入代码片std::this_thread::sleep_for(std::chrono::seconds(5)); // 保证主线程等待足够长的时间让线程池处理完任务return 0;
}