mysql Connector C/C++ 多线程封装
在网上找了好久,有很多封装,但是感觉对多线程处理的不多,都不是很理想。封装完的第一个版本,想法比较简单,使用一个单例模式,对应一个连接,多线程查询的时候都是在这个链接上完成,如下简略代码
classDbClass
{public:
open(....)
{
mysql_real_connect(mDB);
}
QuerySQL(....)
{mysql_real_query(mDB);
}protected:
MYSQL*mDB;
}
但实际使用中发现只要多线程一开就报错,一般就是lost connect之类的错误,开始以为就是单纯的连接断开,所以在连接上面做了一些文章,每次查询的时候使用ping确定连接是否正常,具体ping怎么写我这里就不赘述了,网上有很多文章,加完了Ping,对连接设立了超时时间依然不能解决问题。
查了一下文档发现在使用多线程时mysql_real_query函数和mysql_store_result函数必须加锁,由于ping有可能造成连接重连,因此在ping里面也加上了锁,如下代码
classDbClass
{public:
open(....)
{
mysql_real_connect(mDB);
}
ping()
{
mutex.lock();
mysql_ping();