Являются ли немедленные транзакции из нескольких потоков выполняются последовательно на одном соединении в sqlite3? - PullRequest
0 голосов
/ 18 марта 2020

Я пишу программу на C ++, которая имеет одно соединение sqlite3. Это соединение доступно нескольким потокам. Каждый поток создает транзакцию BEGIN IMMEDIATE, и никакой другой синхронизации нет. У меня есть следующие вопросы:

Можем ли мы использовать блокировку IMMEDIATE для синхронизации потоков?

То есть гарантируется ли выполнение транзакций? последовательно, потому что они запускаются с BEGIN IMMEDIATE?

Гарантируется ли, что потоки не начнут перекрываться друг с другом и время от времени выходят из строя из-за ошибок «Не удается создать транзакцию в транзакции» или из-за других ошибок?

Важно отметить, что каждый поток передает весь свой код SQL за один вызов sqlite3_exe c. То есть ни один поток не выполняет «BEGIN IMMEDIATE», а остальная часть кода SQL в отдельных вызовах sqlite_exe c. Это кажется важным, потому что, в противном случае, иногда я получаю эту ошибку - «Невозможно создать транзакцию внутри транзакции». Это происходит, когда один поток выполняет «BEGIN IMMEDIATE», а затем приходит другой и пытается выполнить «BEGIN IMMEDIATE».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...