c++连接mysql的连接池实现

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

逻辑图:

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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值