Files
dcapp/datacenter/inc/ConnectionPool.h
2025-02-28 09:57:32 +08:00

46 lines
1.2 KiB
C++

#include <vector>
#include <queue>
#include <mutex>
#include <condition_variable>
class ConnectionPool {
public:
ConnectionPool(size_t poolSize) : maxPoolSize(poolSize) {
for (size_t i = 0; i < maxPoolSize; ++i) {
connections.push(new Database());
}
}
~ConnectionPool() {
while (!connections.empty()) {
delete connections.front();
connections.pop();
}
}
Database* getConnection() {
std::unique_lock<std::mutex> lock(mutex);
while (connections.empty()) {
condition.wait(lock);
}
Database* conn = connections.front();
connections.pop();
std::cout << "Pool " << __func__ << " ok" << std::endl;
return conn;
}
void returnConnection(Database* conn) {
std::unique_lock<std::mutex> lock(mutex);
connections.push(conn);
condition.notify_one();
std::cout << "Pool " << __func__ << " ok" << std::endl;
}
private:
std::queue<Database*> connections; // 连接队列
size_t maxPoolSize; // 最大连接池大小
std::mutex mutex; // 互斥锁
std::condition_variable condition; // 条件变量
};