可以跨线程共享准备好的语句
May prepared statements be shared across threads?
using libmysqlclient_r.so 即c MySQL Connector.根据当前架构,在用于连接 1 的线程 1 中,将创建并缓存准备好的 stmt。接下来,对于线程 2 连接 2,将重用缓存的准备好的 STMT。
执行后,程序在随机位置抛出分段错误。
注意:如果我只保留一个线程并执行,那么它永远不会抛出分段错误。
我没有在mysql文档中找到任何关于它的内容,即使我遵循了以下所有必要的步骤:http://dev.mysql.com/doc/refman/4.1/en/threaded-clients.html
请建议是否在线程中共享准备 stmts 是问题?
AFAIK ,预准备语句是创建/与连接上下文关联的。prototype 函数需要连接作为输入参数,因此您不能重用在 connection_B 中connection_A上下文中准备的准备语句......
MYSQL_STMT *mysql_stmt_init(MYSQL *mysql)
我个人的经验是,只要设置了某种锁定机制并且所有线程都使用相同的连接,它们就可以共享。
我遇到了一些奇怪的双重释放和内存损坏,这可能是由两个线程为预准备语句设置参数并大致同时启动它们引起的。一旦我使用互斥锁来防止线程这样做,崩溃就消失了。性能损失并不高:在设置预准备语句参数和查询本身上花费的时间很少,如果您的查询需要很长时间才能执行,您的里程可能会有所不同。
相关文章:
- 使用准备好的语句大容量插入到postgresql
- 当 std::future 准备好被检索时发出信号主线程
- 使用 std::async 准备好后立即显示结果
- 如何确定网络堆栈何时准备好再次打开到同一主机/端口的套接字?
- ODBC-编码在C 中准备的语句
- MySQL准备的语句未使用C 连接器在无限环中清理
- clang的libc++生产准备好了吗?
- 多卷曲C++ 准备好时不断提供新的处理程序
- 可以跨线程共享准备好的语句
- 将数值绑定到准备好的sql的正确方法
- libmysqlcppconne准备的语句导致glibc内存损坏
- C++套接字从未准备好使用轮询进行写入
- MysqlC++驱动程序-创建后获取准备好的语句查询
- 如何在不使用准备好的OpenCv函数的情况下在c++中实现对图像的不锐利遮罩
- QSqlQuery:在执行之前获取准备好的语句字符串
- 我如何积累数据,直到它准备好通过串行发送
- Qt Qcamera未准备好
- libpqxx 结束准备的语句和结果
- SQLite 查询未准备好行,但为空值
- 在准备好的语句中使用多个"?"参数表