问题场景:一个程序内有2个以上守护线程,当某条件触发时,调用mysql_query向mysql数据库内插入一个记录,经过试验,发现两个线程同时触发条件向mysql内插入记录时,报错如下:怀疑是因为两个线程同时向数据库内插入记录造成的冲突。问题:1. Windows环境下,mysql_query是线程安全的么? 我使用mysql server 5.5.16,程序启动是就初始化一个数据库连接,调用mysql_real_connect,以后保持长连接不断开,需要插入记录时调用mysql_query2. 如果不是线程安全的,有什么可靠的解决方案?3. 搜索了一下那个错误信息,有几个建议是关于mysql服务器配置的,如修改bind-ipaddress,修改skip-name-resolve等,我是在window下安装的mysql,配置文件里貌似就没有这些选项求指点

解决方案 »

  1.   

    当你两个线程同时做插入操作时,会因争抢 MYSQL mysql 而出错,所以你可以在各自的线程中定义单独的mysql变量,在连接数据库。之后执行同时插入等操作就不会有问题了。
      

  2.   

    显然不是线程安全的。
    可以为每个线程创建单独的mysql连接,如楼上所说,创建独立的mysql* 句柄。
    这样不至于互相干扰。