并发连接MySQL
先吐槽一下libmysqlclient
API的设计, 多个线程同时去connect
居然会core掉. 后来Google了一番, 才发现mysql_real_connect
不是线程安全的, 需要一些额外的处理. 具体就是:
- 首先调用一次
mysql_library_init
, 在整个程序生命周期中只需要调用一次 - 然后每次
connect
的时候, 然后以此调用mysql_init
,mysql_thread_init
和mysql_real_connect
- 连接关闭的时候, 以此调用
mysql_close
和mysql_thread_end
- 最后在程序退出之前调用
mysql_library_end
PS: 关于第4点, 我没处理, 无非就是会内存泄漏. 关键我找不到C++的方式可以在main函数退出之前自动调用mysql_library_end
. 太操蛋了.