Межпроцессная безопасность потоков SQLite (на iOS)

Я пытаюсь определить, является ли мой sqlite-доступ к базе данных потокобезопасным на iOS. Я пишу приложение не из App Store (или, возможно, демон запуска), поэтому одобрение Apple не является проблемой. Рассматриваемая база данных является встроенной sms.db, поэтому наверняка ОС также обращается к этой базе данных для чтения и записи. Я только хочу быть в состоянии безопасно прочитать это.

Я читал это о чтении из нескольких процессов с помощью sqlite:

Одна и та же база данных может быть открыта одновременно несколькими процессами. Несколько процессов могут выполнять SELECT одновременно. Но только один процесс может вносить изменения в базу данных в любой момент время однако.

Я понимаю, что потокобезопасность может быть скомпилирована из sqlite и что sqlite3_threadsafe()можно использовать для проверки этого. Выполнение этого на iOS 5.0.1

int safe = sqlite3_threadsafe();

дает результат 2. Согласно this, это означает, что блокировка мьютекса доступна. Но это не обязательно означает, что он используется.

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

Я тоже это читал.Похоже, sqlite3_config()можно использовать для включения безопасной многопоточности, но, конечно, я не могу контролировать или видеть, как сама ОС могла использовать этот вызов (не так ли?). Если бы я снова сделал этот вызов в своем приложении, сделал ли бы он безопасным чтение базы данных, или он только разрешал бы одновременный доступ для нескольких потоков в моем приложении , которое использовало тот же sqlite3дескриптор базы данных?

В любом случае, мой вопрос...

могу ли я безопасно читать эту базу данных, к которой также обращается iOS, и если да, то как?

9
задан Community 23 May 2017 в 12:01
поделиться