【发布时间】:2019-02-17 01:19:18
【问题描述】:
...
options["OPT_WRITE_TIMEOUT"] = timeout;
std::lock_guard<std::recursive_mutex> locker(mutex_);
auto driver = sql::mysql::get_driver_instance();
connection_.reset(driver->connect(options));
...
此代码在单个线程中执行。它就像一个连接线程。
我想要的只是在建立连接的过程中停止此连接以启动新连接,例如,使用新的更改选项。难道没有一种安全的方法可以做到这一点,否则我注定要等到当前的连接尝试超过超时时间?
【问题讨论】:
-
当您启动另一个线程以尝试使用新参数进行另一个连接时,您不能让这个线程运行完成吗?
-
@MikeNakis 我认为“sql::mysql::get_driver_instance()”可以创建唯一的“驱动程序”实例(如单例),因此我只能同时创建一个新连接通过使用互斥锁保护进程。所以我只能保护“sql::mysql::get_driver_instance();”使用互斥锁的方法,然后开始创建没有任何互斥锁的新连接,对吗?附言我不知道是什么让我认为“连接”方法也必须受到 mutext 的保护:/
-
好吧,我不知道。我很难相信
get_driver_instance()或driver->connect()需要防止再次进入,但我真的不知道。 -
@MikeNakis as its documentation 表示我们唯一需要的是避免多个线程同时调用此函数。但是现在我真的很怀疑我们是否需要在每次开始连接之前调用它(这类似于驱动程序的初始化)。如果它必须只调用一次并带有互斥锁保护并且没有任何必要再次调用它吗?老实说,这将使我的代码更容易和更愉快。有什么想法可以让我准确了解它吗?谢谢!
标签: c++ mysql-connector connection-timeout mysql-connect