Вопрос по multithreading, iphone, objective-c, ios – многопоточность sqlite3 в целевом c

3

Я запускаю фоновый поток в моем приложении с dispatch_async, и иногда мой основной поток и фоновый поток одновременно обращаются к базе данных, и это приводило к ошибке базы данных, и я пытался ее решить с помощью sqlite3_threadsafe (), которая всегда возвращала 2 то есть, я не могу использовать одно и то же соединение с базой данных в двух потоках, и я хочу, чтобы оно вернулось 1 Кто-нибудь может мне помочь в этом отношении

Вы не можете получить доступ к базе данных SQLIte одновременно из двух разных потоков. Hot Licks

Ваш Ответ

2   ответа
4

что вы придерживаетесь неправильного подхода. SQLite не является надежно защищенным от потоков, независимо от того, как вы его компилируете & # x2014; увидетьFAQ, Даже если SQLite скомпилирован для обеспечения безопасности потоков, одна и та же база данных не может использоваться из нескольких потоков, если какие-либо транзакции ожидают выполнения или какие-либо операторы остаются незавершенными.

Приведенные выше рекомендации по использованию Grand Central Dispatch для направления всех обращений SQLite в очередь последовательной отправки, по моему мнению, являются правильным способом продолжения, хотя я с большей вероятностью рекомендую вам создать собственную очередь, а не использовать основную очередь для простая причина, по которой вы можете надежно диспетчеризировать, когда хотите дождаться результата.

Затопление SQLite командами может привести к ошибкам SQLITE_BUSY. Лучше всего шагать по тем командам и по возможности избегать многопоточности.
@ Томми спасибо за ответ :) user1184202
Решение FMDB делает именно это, создает очередь только для взаимодействия с базой данных.
1

поэтому вы всегда находитесь в главном потоке при доступе к хранилищу sqlite.

dispatch_async(dispatch_get_main_queue(), ^ {
    //code goes here
});
Вероятно, для этого лучше использовать выделенную настраиваемую последовательную очередь, как предложил Томми, а не рисковать блокировкой / блокировкой основной очереди.

Похожие вопросы