使MySQL客户端程序线程安全吗?

时间:2012-06-04 23:18:52

标签: mysql c multithreading thread-safety d

在运行使用MySQL C API的D编程时,我遇到了一个有趣的线程问题。我收到错误2013“在查询期间丢失了与MySQL服务器的连接。”当足够的线程充斥网络接口缓冲区时,似乎会出现问题,但服务器仍有更多要传输的内容。这是我根据一些研究和在两台不同计算机上运行程序的最佳猜测。一台计算机与服务器的连接速度为100Mb,另一台计算机的连接速度为1Gb。具有100Mb连接的计算机会抛出错误,而1Gb计算机则不会。我想知道我是否遇到了MySQL文档中How to Write a Threaded Client第一段中描述的内容。如果我是,我需要用SIGPIPE做什么,我该怎么做?

对于那些感兴趣的人,我在任何库调用之前调用mysql_library_init,并且我使用mysql_init和mysql_real_connect为每个线程创建一个新的MYSQL *。另外值得注意的是,我正在执行的查询是小型SELECT,每个查询只返回几千条记录,所有查询都是从同一个表中执行的。

1 个答案:

答案 0 :(得分:0)

请在mysql_real_connect之前尝试:

my_bool myb = 1;
mysql_options(conn, mysql_option.MYSQL_OPT_RECONNECT, &myb);

另外请检查这个mysql疑难解答页面: http://dev.mysql.com/doc/refman/5.5/en/gone-away.html