#include <iostream>
#include<thread>
#include <queue>
#include <mutex>
#include <chrono>
#include <condition_variable>
#include <functional>
using namespace std;
#define NUM_THREADS 5
class ThreadPool {
public:
explicit ThreadPool(size_t size):stop_(false) {
// 创建线程池
for(size_t i = 0; i < size; i++) {
threads_.emplace_back([this] {
while (true) {
unique_lock<mutex> lock(mutex_);
printf("wait");
condition_.wait(lock, [this] {return stop_ || !tasks_.empty();});
if(stop_ && tasks_.empty() ) {
return;
}
auto task = move(tasks_.front());
tasks_.pop();
lock.unlock();
task();
}
});
}
}
template<class F>
void addTask(F&& f) {
printf("add");
std::unique_lock<mutex> lock(mutex_);
tasks_.emplace(forward<F>(f));
condition_.notify_one();
}
~ThreadPool() {
printf("pool delete");
std::unique_lock<std::mutex> lock(mutex_);
stop_ = true;
condition_.notify_all();
for (auto& thread : threads_) {
thread.join();
}
}
private:
bool stop_;
std::vector<std::thread> threads_;
std::queue<std::function<void()>> tasks_;
std::mutex mutex_;
condition_variable condition_;
};
// 线程的运行函数
void say_hello(int num)
{
printf("Hello Runoob!%d\n", num);
}
void SayHello(int num) {
// std::cout << "Hello from thread " << num << std::endl;
for(int i = 0; i < num; i ++) {
cout << "循环" << num << endl;
}
}
int main() {
ThreadPool pool(16);
for (int i = 0; i < 800; ++i) {
pool.addTask([i] { SayHello(i); });
}
std::this_thread::sleep_for(std::chrono::seconds(5));
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交