MySQL 连接器/C++.尝试在此过程中停止连接到数据库
MySQL Connector/C++. Trying to stop connecting to a DB in the process of it
...
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));
...
此代码在单个线程中执行。它就像一个连接线。
我想要的只是在建立连接的过程中停止此连接以启动新连接,例如,使用新的更改选项。难道没有一种安全的方法可以做到这一点,否则我注定要等到当前的连接尝试超过超时?
因此,get_driver_instance()
的文档说您不能同时从多个线程调用它。 我想这是因为第一次调用它将创建驱动程序,因此该方法的重新输入可能会导致创建驱动程序的多个实例。 这一切都很好,因为您可以在程序的静态初始化期间在任何生成的线程之外调用此方法,因此无需使用互斥锁来保护它。 因此,您只需获取一次驱动程序并将其存储以供程序的其余部分使用。
driver->connect()
的文档并没有说它不是可重入的,所以它可能是可重入的。这意味着您可以生成一个线程来尝试连接,并生成其他线程,这些线程也尝试使用不同的参数进行连接。
因此,您不应该在任何地方都需要互斥锁。 如果出于某种原因您确实不想获取一次驱动程序并将其存储以供以后使用,那么您可以使用互斥锁来防止重新输入对get_driver_instance()
的调用,但您不会(也不应该(使用互斥锁来防止重新输入对driver->connect()
的调用。 因此,您将能够从多个线程并行调用driver->connect()
。
顺便说一下,get_driver_instance()
应该立即返回;这是可能需要很长时间的driver->connect()
电话。
相关文章:
- 是否删除在对象构造过程中创建的对象
- 如何在鼠标挂钩过程中检测拖动
- 在C++的两个字符串中连接以逗号分隔的唯一值
- clang 插件:在编译过程中修改 AST
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 如何在Qt中连接来自不同窗口的两个对象?
- Adafruit 羽毛RFM69HCW在使用过程中会冻结,需要硬重置
- 线程过程中的线程同步问题
- MySQL 连接器/C++.尝试在此过程中停止连接到数据库
- 在线程 A 中创建一个 std::thread 对象,在线程 B 中连接
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 在两个窗口中连接到相同的信号
- 在函数中连接两个字符,并在 C++ 中返回输出
- 在调用过程中删除 std::函数
- 动态矩阵特征分解过程中的误差
- cmake在构建过程中使用另一个工具检测标志
- 在模板参数推导过程中丢失限定符
- 在写入过程中立即使用boost::asio检测关闭的TCP连接
- 如何在C++中连接代码执行过程中的dll文件
- 字符串连接过程中可能出现缓冲区溢出