![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
SQLite поддерживает три различных способа потоков: Однопоточный. В этом способе отключены все mutexes, и
SQLite небезопасен для использования больше, чем в
единственном потоке сразу. Multi-thread.
В этом способе SQLite может безопасно использоваться многократными потоками
при условии, что никакое соединение с БД
или любой объект, полученный из соединения с базой данных, такой как
подготовленный запрос,
не используются в двух или больше потоках в то же время. Serialized. В преобразованном в последовательную форму способе
вызовы API, чтобы управлять SQLite любое
соединение с БД или
любой объект, полученный из соединения с базой данных,
могут быть использованы безопасно из многократных потоков.
Эффект на отдельный объект совпадает с тем, как если бы вызовы API были все
сделаны в том же самом порядке от единственного потока.
Имя "преобразованный в последовательную форму" является результатом
того, что SQLite использует mutexes, чтобы преобразовать в последовательную
форму доступ к каждому объекту. Способ может быть отобран во время компиляции (когда библиотека SQLite
собирается из исходного кода), во время запуска (когда применение, которое
намеревается использовать SQLite, инициализируется) или во время выполнения
(когда новое соединение с базой данных SQLite создается).
Вообще говоря, время выполнения отвергает время запуска, а оно
отвергает время компиляции. Кроме того, single-thread
не может быть отвергнут. Режим по умолчанию serialized. Используйте параметр времени компиляции
SQLITE_THREADSAFE,
чтобы выбрать способ потоков. Если никакой параметр времени компиляции
SQLITE_THREADSAFE
не присутствует, то используется serialized mode.
Это может быть сделано явно через
-DSQLITE_THREADSAFE=1. С
-DSQLITE_THREADSAFE=0 выбирается
single-thread. -DSQLITE_THREADSAFE=2
выбирает multi-thread. Возвращаемое значение sqlite3_threadsafe()
это значение SQLITE_THREADSAFE, заданное
во время компиляции. Это не отражает изменения способа потоков, сделанного
во время выполнения через
sqlite3_config()
или флагами, данными как третий аргумент
sqlite3_open_v2(). Если выбран single-thread при сборке,
то критическая логика mutex опущена, и невозможно позволить multi-thread или
serialized во время запуска или выполнения. Предполагая, что способ времени компиляции не single-thread,
способ работы потоков может быть изменен во время инициализации, используя
sqlite3_config().
SQLITE_CONFIG_SINGLETHREAD помещает SQLite в режим single-thread,
SQLITE_CONFIG_MULTITHREAD в multi-thread, а
SQLITE_CONFIG_SERIALIZED в serialized. Если single-thread не был отобран во время компиляции или запуска, то
отдельные соединения с базой данных могут быть созданы как multi-thread
или serialized. Невозможно понизить отдельное соединение с базой данных до
single-thread. При этом невозможно нарастить отдельное соединение с базой
данных, если способ времени компиляции или времени запуска
single-thread. Способ потоков для отдельного соединения с базой данных определяется
флагами, данными как третий аргумент
sqlite3_open_v2().
Флаг SQLITE_OPEN_NOMUTEX
заставляет соединение с базой данных быть в способе multi-thread, а флаг
SQLITE_OPEN_FULLMUTEX
заставляет соединение с базой данных быть в способе serialized.
Если никакой флаг не определяется или если
sqlite3_open() или
sqlite3_open16() использованы вместо
sqlite3_open_v2(), то режим по умолчанию
определен параметрами настройки времени компиляции и времени запуска.
Choose any three.
1. Обзор
2. Выбор времени компиляции
3. Выбор во время запуска
4. Выбор во время выполнения