MySQL Connector / C ++ висит на чтение ()

Я пишу многопоточное приложение на C ++, используя потоки Boost (pthread). Приложение порождает 100 потоков, и каждый поток выполняет следующую задачу (я пишу фрагмент кода, который будет выполняться в каждом потоке):

try {

driver = get_driver_instance();
con = driver->connect(SettingsClass.HostName, \
SettingsClass.UserName,SettingsClass.Password);

// SettingsClass is a global static class whose members
// (HostName, UserName, Password, etc) are initialized once
// before *any* thread is created.

con->setSchema("MyDatabase");

driver->threadInit();

string dbQuery = "select A, B, C from XYZTable where D=?";
prepStmt = con->prepareStatement(dbQuery);
prepStmt->setInt(1, 1);
rSet = prepStmt->executeQuery();

/* Do Something With rSet, the result set */

delete rSet;
delete prepStmt;
if (con != NULL && !con->isClosed()) {
con -> close();
driver->threadEnd();
delete con;
}
catch (SQLException &e)
{
/* Log Exception */
}

При запуске процесса (приложение, как упоминалось ранее, т. Е. Со 100 такими потоками), я присоединяю gdb на полпути и наблюдаю, что более 40% потоков имеют повешенный в вызове read (). Все обратные трассировки имеют библиотечные функции mysql (vio_read () и т. Д.), И ни одна из них не из моего кода, так как мой код не выполняет никаких операций ввода-вывода.

Кто-нибудь может указать, почему возникает эта проблема. Должен ли я проверить свой код / ​​сеть или конфигурацию сервера MySQL? Правильно ли я использовал библиотеку соединителей C ++?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]