Страница 1 из 1

Доступ к FB из различных потоков

Добавлено: 22 июл 2006, 09:24
S. Makhortov
Не возникало ли у кого-нибудь проблем с subj? Конкретнее, у меня один thread пишет в БД, другой читает. Происходит нерегулярное зависание пишущего потока при выполнении API-вызова isc_put_segment(). В чем может быть дело?

Добавлено: 22 июл 2006, 12:49
dimitr
а потоки ты синхронизируешь?

Добавлено: 24 июл 2006, 08:22
S. Makhortov
Вопрос слишком абстрактен. Нет ли дополнительных требований синхронизации, касающихся доступа к FB?

Добавлено: 24 июл 2006, 08:46
dimitr
если несколько потоков работает с одним хендлом аттача, то их работа должна синхронизироваться приложением. Иначе создавай коннект на каждый поток.

Добавлено: 26 июл 2006, 15:15
S. Makhortov
К сожалению, не все так определенно. Когда используется отдельное соединение (ISC_DB_HANDLE) на каждый поток без синхронизации, все равно потоки виснут при одновременном входе в какие-нибудь функции IB API. Если операции доступа синхронизировать (критические секции), то количество аттачей роли не играет и программа вроде бы работает. Однако, если искусственно повысить интенсивность обращений к gds32.dll, то рано или поздно один поток повисает, а остальные бесконечно ждут его в связи с синхронизацией. Может быть, известны еще какие-нибудь нюансы?

Добавлено: 26 июл 2006, 15:19
Merlin
Локальный коннект?

Добавлено: 26 июл 2006, 15:31
hvlad
S. Makhortov писал(а):Может быть, известны еще какие-нибудь нюансы?
вызовы isc_attach_database нужно сериализовать
версию севера и клиента нужно сообщать

Добавлено: 26 июл 2006, 15:48
S. Makhortov
Коннект локальный. Версия FB 1.5, также проверял на IB 6. Сериализовать - это хороший совет. Но, как сказано выше, при одном коннекте и сериализации доступа при интенсивной нагрузке один поток виснет и т.д. М.б. сервер не успевает завершить текущую операцию, когда поступает новая? Хотя, это не в моей компетенции.

Добавлено: 26 июл 2006, 15:53
Merlin
По TCP соединяйся, через localhost. И будет тебе щастье. Во всяком случае, должно :)

Добавлено: 26 июл 2006, 16:02
dimitr
S. Makhortov писал(а):Коннект локальный.
он в версиях до FB2 не умеет работать параллельно

Добавлено: 26 июл 2006, 16:06
CyberMax
Лучше поздно, чем никогда...
http://www.ibase.ru/devinfo/ibx.htm. Раздел TIBDatabase.

Добавлено: 26 июл 2006, 16:24
S. Makhortov
Спасибо.