MySql多线程访问
来源:互联网 发布:zoe和zelda理论 知乎 编辑:程序博客网 时间:2024/05/03 06:06
如果你用线程的编程,你应该用--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.
- MySql多线程访问
- 基于C API的MySQL数据库多线程访问方法
- 基于C API的MySQL数据库多线程访问方法
- 基于C API的MySQL数据库多线程访问方法(收藏)
- 基于C API的MySQL数据库多线程访问方法
- C# 多线程访问UI
- ATL对象多线程访问
- 多线程访问控件
- c#多线程访问界面
- 多线程数据访问
- c#多线程访问界面
- ATL对象多线程访问
- Java多线程访问数组
- socket多线程访问webservice
- Httpclient多线程访问
- 多线程 -- 原子访问
- 多线程访问数据库
- Servlet请求多线程访问
- 工作感悟
- LeetCode题解:Integer to Roman
- [转]ZBarSDK支持armv7s
- 串行线路网际协议SLIP
- [LeetCode] Search in Rotated Sorted Array
- MySql多线程访问
- Virtual和abstract的区别
- snprintf的使用
- LeetCode Binary Tree Inorder Traversal 中序遍历二叉树
- C运算符优先级
- android studio 问题整理
- Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译
- 绝对路径与相对路径
- 打造基于jQuery的高性能TreeView