这个class的设计和MysqlObj不一样了,不会像MysqlObj提供Connect函数来进行连接,这里我直接就在构造函数当中创建好池,因为如果再提供一个init之类的函数来创建池的话我觉得与这个class的设计语意违背,毕竟池创建好就能直接使用了。
在构造函数当中使用到了boost的property_tree,目的就是从config里面读取database.xml或者database.json配置文件,从配置文件当中获取到host,user,dbname等等。
做的工作只有一件事情,从配置文件当中读取出的max_connections,说明了池的容量,需要建立这么多的连接数目,然后使用map来保存这个连接,map的first是连接指针,second指的是Mysql连接是否可用,true为可用,false为已经被其他的占用了。
析构函数的话直接轮询map,然后删除掉对应的指针,我现在正在想用shared_ptr来代替掉指针。
getConnection()函数就是说从池当中取出一个连接,就是轮询map,然后查找有用的连接。
这里为了应对多线程使用了锁,使用并非简单的mutex.lock()和mutex.unlock()。我更加喜欢使用RAII方式的unique_lock和lock_guard,但是unique_lock提供了更好的上锁和解锁机制。
releaseConnection()正好和getConnection()是相反的,也是用了unique_lock机制。
#include
#include
#include
#include "mysql_obj.h"
<