逻辑图:

connector_pool头文件
#ifndef __DB_CONNECT_POOL__H
#define __DB_CONNECT_POOL__H
#include <string.h>
#include <mysql/mysql.h>
#include <mutex>
#include <condition_variable>
#include <list>
struct db_config
{
std::string host;
std::string user;
std::string passwd;
std::string db_name;
unsigned short port;
unsigned short conn_num;
};
class db_connector_pool;
class db_connector
{
public:
friend class db_connector_pool;
typedef std::function<void(MYSQL*)> release_connector_cb;
MYSQL* get_conn();
private:
db_connector(MYSQL* conn, release_connector_cb cb);
public:
~db_connector();
private:
MYSQL *m_conn;
std::function<void(MYSQL*)> m_cb;
};
typedef std::shared_ptr<db_connector> db_connector_ptr;
class db_connector_pool
{
public:
db_connector_po

这篇博客介绍了如何在C++中实现一个MySQL连接池,包括初始化时根据配置缓存连接数,通过get_connector获取数据库连接,以及如何在connector中封装数据库操作。同时,文章提到了连接池的线程安全特性,并记录了一个关于notify_one()可能导致的问题,即在特定情况下可能只唤醒一个等待线程,而其他线程无法被唤醒。
最低0.47元/天 解锁文章
2238

被折叠的 条评论
为什么被折叠?



