• MySql多线程访问


    如果你用线程的编程,你应该用--with-thread-safe-client编译MySQL C API,这将使C API线程对每个连接更安全。你可以让2个线程共享相同的连接,只要如果你做下列事情:

    两个线程不能同时在同一个连接上发送查询到MySQL。特别是你必须保证在一个mysql_query()和mysql_store_result()之间没有其他线程正在使用同一个连接。

    许多线程能存取用mysql_store_result()检索出来的不同结果集合。

    如果你使用mysql_use_result,你必须保证没有其他线程在同一个连接上正在询问任何东西,直到结果集合被关闭。

    设计如下线程,验证上述内容, Thread1和Thread2使用同一个mysql连接,执行select语句:

    Thread1:                                               Thread2:

         mysql_query();                                    sleep(1);

                  |                                                       |

                  |                                                       |

             sleep(2);                                      mysql_query();

                  |                                                       |

                  |                                                       |

      mysql_store_result();                      mysql_store_result();

    线程2中调用mysql_query()时出错,通过mysql_error()返回的错误信息为:Commands out of sync; you can’t run this command now.

    解决方法1:

    一个线程分配一个mysql连接

    解决方法2:

    在mysql_query()之前加上线程锁,在mysql_store_result()之后释放线程锁,

    pthread_mutex_lock();

    |

    |

    mysql_query();

    |

    |

    mysql_store_result();

    |

    |

    pthread_mutex_unlock();

    附(来自于MySql 文档):

    Two threads can't send a query to the MySQL server at the same time on the same connection.
    In particular, you have to ensure that between a mysql_query() and mysql_store_result() no other thread is using the same connection.
  • 相关阅读:
    Gradle 修改 Maven 仓库地址
    返回到上一页的html代码的几种写法
    Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
    MyBatis传入多个参数的问题
    8 个最优秀的 Android Studio 插件
    Html中隐藏a标签
    js中获取jsp中的参数
    同一个页面里的JS怎样获取jsp从别的页面获取的参数
    《Android源码设计模式解析与实战》读书笔记(一)
    HDU ACM 1068 最大独立集
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318581.html
Copyright © 2020-2023  润新知