近来多线程运行一段时间就报2006错误。而且一旦出现2006,就再也无法正常查询数据库了。怀疑是多线程问题。从网上搜索了一下,总结方法:
- 使用--with-thread-safe-client编译终端。
- 如果几个共用一个MYSQL*,在mysql_query和mysql_store_result之间,不能有其他数据库动作(查询、修改、删除等)。为此,需要使用线程锁。
这个有点麻烦,特别是在判断各种出错情况下。
- 多线程编程写法:
在主线程中,调用 mysql_library_init(0, NULL, NULL)、mysql_library_end()。
初始化:mysql_thread_init();MYSQL *mysql = mysql_init(NULL);
关闭:mysql_close(mysql); mysql_thread_end();
具体情况,继续观察。
就个人感觉,应该说第二种方法最好。