Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TIBDatabase - потокобезопасен?


Piter ©   (2005-10-31 19:06:00) 

Можно ли к одному TIBDatabase подключать различные TIBQuery, создаваемые в разных потоках?


Zacho   (2005-11-01 01:52:00) [1]

Piter ©   (01.11.05 1:16) [9]
"TIBTransaction provides discrete transaction control over a one or more database connections in a database application."


Насколько я понял, "more database connections" - имеется в виду механизм 2PC (two phase commit). Подробно о 2PC можешь найти информацию на http://www.ibase.ru/develop.htm


Zacho   (2005-11-01 01:45:00) [2]

Piter ©   (01.11.05 1:13) [8]
То есть, для каждого потока свой TIBDatabase - правильно?


Совершенно верно.

Piter ©   (01.11.05 1:16) [9]
Народ, немного не в тему - а где почитать про транзакции?


http://www.ibase.ru/devinfo/ibtrans.htm
http://www.ibase.ru/devinfo/ibx.htm

> И также немного непонятно зачем нужен IBSQL, если есть
>  IBQuery

Как раз наоборот, TIBQuery нафиг не нужен, он сделан для облегчения перевода старых проектов с BDE на IBX или если предпологается в будущем переводить проект на BDE-like компоненты. А так для всего чего угодно достаточно TIBDataSet и TIBSQL.


Piter   (2005-11-01 01:16:00) [3]

Народ, немного не в тему - а где почитать про транзакции? Я то я никак не пойму зачем нужен TIBTransaction. Особенно эту фразу:

"TIBTransaction provides discrete transaction control over a one or more database connections in a database application."

И также немного непонятно зачем нужен IBSQL, если есть  IBQuery.


Piter   (2005-11-01 01:13:00) [4]

Zacho ©   (01.11.05 0:28) [7]

ага, все, понял.

То есть, для каждого потока свой TIBDatabase - правильно?


Zacho   (2005-11-01 00:28:00) [5]

Piter ©   (01.11.05 0:11) [6]
Как я это понимаю? Я так понимаю - что в одном процессе нельзя вызывать функции gdi32.dll из разных потоков, верно?

Это соответственно, приводит к выводу:

Piter ©   (31.10.05 23:53) [4]
Тогда получается из одного процесса вообще нельзя устанавливать больше одного коннекта к базе???


Во-первых, вывод совершенно не верен. Процессы не имееют никакого отношения к кол-ву подключении. Хоть 1000 подключений установи из одного процесса или одного потока.
Во-вторых, из разных потоков вызывать функции gd s32.dll можно, но либо вызовы нужно синхронизировать, либо они должны быть в контексте разных подключений.

Ещё раз и немного более развёрнуто повторю общее правило:
В одном потоке можно работать с произвольным количеством подключений.
С каждым конкретным подключением одновременно можно работать только из одного потока. Если нужно работать с БД в разных потоках, то для разных потоков должны быть отдельные подключения.


Piter   (2005-11-01 00:11:00) [6]

Johnmen ©   (01.11.05 0:02) [5]
Процесс<>поток


да я в курсе :)
А что из этого следует?

Утверждается, что GDI32.dll не потокобезопасен.

Как я это понимаю? Я так понимаю - что в одном процессе нельзя вызывать функции gdi32.dll из разных потоков, верно?

Это соответственно, приводит к выводу:

Piter ©   (31.10.05 23:53) [4]
Тогда получается из одного процесса вообще нельзя устанавливать больше одного коннекта к базе???


Johnmen   (2005-11-01 00:02:00) [7]

Процесс<>поток


Piter   (2005-10-31 23:53:00) [8]

Zacho ©   (31.10.05 23:20) [3]
на каждый поток своё подключение


Ты имеешь в виду, в каждом потоке свой Database и свои Query?

Но как это согласуется с:

gds32.dll (fbclient.dll) не потокобезопасен

?

Тогда получается из одного процесса вообще нельзя устанавливать больше одного коннекта к базе???


Zacho   (2005-10-31 23:20:00) [9]

gds32.dll (fbclient.dll) не потокобезопасен, т.ч. и IBX и FIBPlus тоже непотокобезопасны. Да и нет никакого смысла использовать запросы в разных потоках через одно подключение, т.к. в контексте одного подключения все запросы всё равно выполняются последовательно. Т.ч. общее правило - на каждый поток своё подключение.


Sergey Masloff   (2005-10-31 20:36:00) [10]

Нет.
Насчет FIB+ не знаю но есть поводы сомневаться.


Андрей Жук   (2005-10-31 20:10:00) [11]

Ты вроде бы это спрашивал...
Используй FIB+, там точно потокобезопасно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо