powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Sqlite в многопоточной программе.
25 сообщений из 85, страница 1 из 4
Sqlite в многопоточной программе.
    #39841124
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется ДЛЛ С++ взаимодействующая с приложением через C-API. Пусть в ДЛЛ три экспорт функции и класс cDB, отвечающий за все взаимодействие с БД Sqlite.
1. Приложение вызывает 1-ю функцию ДЛЛ - создается объект класса cDB и через функции cDB что-то пишется в БД.
2. Приложение вызывает время от времени 2-ю функцию ДЛЛ и через cDB пишет данные в БД.
3. приложение вызывает время от времени 3-ю функцию ДЛЛ и через cDB пишет данные в БД. Однако, нет, не пишет. ДЛЛ видит объект cDB, работает с его функциями, однако не видит соединение с БД в cDB, однако, соединение при этом есть и работает. При этом Sqlitе свободна от какого либо взаимодействия с чем либо, для чего функция м.б. заблокирована - что не дает эффекта.
Надо отметить, что функция 2 работает без каких либо проблем (видимо работает в одном потоке с функциями по п.1.
Приложение многопоточное, и в каком потоке какая функция ДЛЛ будет вызываться, и сколько их вообще, потоков в приложении, неизвестно.

Пока видится решение в создании соединения с БД для каждого потока приложения, но неизвестно сколько их, потоков. Не исключено также, что одна и та-же функция в в ДЛЛ может вызываться разными событиями и потоками в приложении.
С другой стороны, потоки, вроде бы, должны работать в одном адресном пространстве и видеть переменные, ведь видим объект cDB в п.3.

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841125
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся, следует читать.
При этом Sqlitе свободна от какого либо взаимодействия с чем либо, для чего функция по п.2 м.б. заблокирована - что не дает эффекта.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841127
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При вызове из тестового приложения последовательно из одного потока все функции работают?
Что с одновременным обращением из разных потоков? https://sqlite.org/threadsafe.html
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841128
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAПока видится решение в создании соединения с БД для каждого потока приложения, но неизвестно сколько их, потоков.ну, это известно. Что коннект в дровах не потокозащищеный объект.
Поэтому программист обязан либо при старте потока внутрь дать коннект, либо каждый поток берет коннект из пула коннектов.
Главное чтобы они не дрались между собой, два потока к одному коннекту.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841129
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone,
Круто у sqllite..
авторSerialized . В сериализованном режиме SQLite может безопасно использоваться несколькими потоками без ограничений.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841130
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, не дерутся. Полностью блокируем вызовы БД потока по п.2. По п.3 соединение с БД не видит, хотя по структурам и вспомогательным классам созданным new в классе cDB все отрабатывается.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841131
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone, из 1-го потока работают, из 2-го нет. Хотя БД сконфигурирована под фулмьютех, пока вопрос одновременности не ставился, пока все по очереди.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841134
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
Логируйте с выводом в лог id потока. Хорошим логировщиком.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841135
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA"Есть многое на свете, друг Горацио, что и не сразу в голову придет."

"Есть муторный процесс на свете этом, который кличут все отладкой."

"Видит" - "не видит" это бесполезный эмоциональный бред.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841141
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, И что даст логгирование? Решение? Ошибиться в программе там просто уже негде. Все выкинуто, функции п.2 и п.3 сделаны абсолютно примитивными и идентичными.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
sqlite3 *db=0;

int func1() // работает
{
const char* SQL = "CREATE TABLE IF NOT EXISTS tab1(a0 real, a1 real, a2 real, a3);";
sqlite3_exec(db, SQL, 0, 0, &err);
}

int func2() //вызывается из другого потока, не видит соединения с БД.
{
// er= sqlite3_prepare_v2(db, "begin;", 10, &ppStmt, &tail); // остатки старого кода. на этом уже затыкался.
const char* SQL = "CREATE TABLE IF NOT EXISTS tab2(a0 real, a1 real, a2 real, a3);";
sqlite3_exec(db, SQL, 0, 0, &err);
}


Dimitry Sibiryakov, что здесь отлаживать? Никаких внешних данных.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841147
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВидит" - "не видит" это бесполезный эмоциональный бред.+1
Аффтар.Приведите свои мысли в порядок и сформулируйте вопрос топика. Коротко!
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841149
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAВсе выкинутоеще выкидывайте. char SQL ЗАЧЕМ?
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841150
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpYUBAВсе выкинутоеще выкидывайте. char SQL ЗАЧЕМ? Это уже не смешно.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841152
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAPetroNotC Sharpпропущено...
еще выкидывайте. char SQL ЗАЧЕМ? Это уже не смешно.разумеется.
Стек ошибки где?
Что значит "не видит"?
Так домохозяйки говорят.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841154
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, не поможет вам стек. Понял, только, что вы любитель демагогии. До свидания.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841157
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
Добро пожаловать в форум!
Хорошо что я вас привел в чувство).
Работайте!
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841184
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpКруто у sqllite..авторSerializedЧто крутого в организации очереди для строго последовательного исполнения запросов???
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841188
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAPetroNotC Sharp, И что даст логгирование? Решение? Ошибиться в программе там просто уже негде. Все выкинуто, функции п.2 и п.3 сделаны абсолютно примитивными и идентичными.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
sqlite3 *db=0;

int func1() // работает
{
const char* SQL = "CREATE TABLE IF NOT EXISTS tab1(a0 real, a1 real, a2 real, a3);";
sqlite3_exec(db, SQL, 0, 0, &err);
}

int func2() //вызывается из другого потока, не видит соединения с БД.
{
// er= sqlite3_prepare_v2(db, "begin;", 10, &ppStmt, &tail); // остатки старого кода. на этом уже затыкался.
const char* SQL = "CREATE TABLE IF NOT EXISTS tab2(a0 real, a1 real, a2 real, a3);";
sqlite3_exec(db, SQL, 0, 0, &err);
}


Dimitry Sibiryakov, что здесь отлаживать? Никаких внешних данных.Так не должно бытью Ну SQLite в исходниках же, зайдите уже внутрь sqlite3_exec и посмотрите, что там происходит.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841194
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
Если так то это банально конечно.
Вот смотри.
Беру постгри базу и обязан делать коннект на поток. Так как не Thread-safe.
А тут заявлено что пофигу.
Круче?
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841198
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри что возвращает sqlite3_threadsafe()
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841200
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
Фигня этот режим многопоточности в данной конкретной бд.
Это не поможет если в клиентском коде бардак.
http://www.prog.org.ru/topic_30824_45.html
Имхо
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841202
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а бардак в прикладном коде потому что
YUBAно неизвестно сколько их, потоков. Не исключено также, что одна и та-же функция в в ДЛЛ может вызываться разными событиями и потоками в приложении.
Надо четко знать, что у нас thread safe и что нет.
Как MS в шарпе ввел даже слово async чтобы помечать))
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841327
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПосмотри что возвращает sqlite3_threadsafe() Сразу и смотрел =1. С этой стороны проблем не должно быть.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841338
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBADima TПосмотри что возвращает sqlite3_threadsafe() Сразу и смотрел =1. С этой стороны проблем не должно быть.ваши проблемы мы "не видим", так же как вы и пишите в заголове сообщения.
Увы.
...
Рейтинг: 0 / 0
Sqlite в многопоточной программе.
    #39841358
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBADima TПосмотри что возвращает sqlite3_threadsafe() Сразу и смотрел =1. С этой стороны проблем не должно быть.
Если правильно понимаю, то
https://sqlite.org/compile.html#threadsafe SQLITE_THREADSAFE=1 sets the default threading mode to Serialized.
Получается все должно работать.

Возможно проблема совсем в другом, например обращение к БД происходит до открытия БД. Ошибка какая в err ?
...
Рейтинг: 0 / 0
25 сообщений из 85, страница 1 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Sqlite в многопоточной программе.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]