Итак, документация get_driver_instance()
гласит, что вы не должны одновременно вызывать его из нескольких потоков.Я полагаю, это потому, что при первом вызове он создает драйвер, поэтому повторный вход в этот метод может привести к созданию нескольких экземпляров драйвера.Это все очень хорошо, потому что вы можете вызывать этот метод во время статической инициализации вашей программы вне каких-либо порождаемых потоков, поэтому нет необходимости защищать его мьютексом.Таким образом, вы получаете драйвер один раз и сохраняете его для использования остальной частью вашей программы.
Документация driver->connect()
не не говорит, что это не такповторно входящий, так что, вероятно, является повторно входящим.Это означает, что вы можете порождать один поток, чтобы попытаться подключиться, и порождать дополнительные потоки, которые также пытаются подключиться с другими параметрами.
Таким образом, вам не нужно нигде использовать мьютекс.Если по какой-то причине вы действительно не хотите получить драйвер один раз и сохранить его для последующего использования, то вы можете использовать мьютекс для защиты от повторного ввода вызова на get_driver_instance()
, но вы этого не делаете (и должнынет) используйте мьютекс для защиты от повторного ввода вызова на driver->connect()
.Таким образом, вы сможете параллельно вызывать driver->connect()
из нескольких потоков.
Кстати, get_driver_instance()
должен немедленно вернуться;это driver->connect()
звонок, который может занять много времени.