0

使用 libmysqlclient_r.so 即 c mysql 连接器。根据当前的拱门,在 thread1 中为 connection1 准备的 stmt 将被创建和缓存。接下来为 thread2 connection2 缓存准备好的 stmt 将被重用。

执行后,程序在随机位置抛出分段错误。

注意:如果我只保留一个线程并执行,那么它永远不会引发分段错误。

我没有在 mysql 文档中找到任何关于它的内容,即使我遵循了以下给出的所有必要步骤:http: //dev.mysql.com/doc/refman/4.1/en/threaded-clients.html

请建议跨线程共享prepare stmts是否有问题?

4

2 回答 2

1

AFAIK,准备好的语句是创建/与连接上下文相关联的。原型函数需要连接作为输入参数,所以不能在connection_B中重用在connection_A上下文中准备好的prepared statement...

MYSQL_STMT *mysql_stmt_init(MYSQL *mysql)
于 2012-04-13T06:09:28.253 回答
1

我个人的经验是,只要设置了某种锁定机制并且所有线程使用相同的连接,它们就可以共享。

我遇到了一些奇怪的双重释放和内存损坏,这可能是由两个线程为准备好的语句设置参数并大致同时启动它们引起的。一旦我使用互斥锁来防止线程这样做,崩溃就消失了。性能损失并没有那么高:在设置准备好的语句参数和查询本身上花费的时间很少,如果您的查询需要很长时间执行,您的里程可能会有所不同。

于 2018-10-23T13:16:56.557 回答