sqlite3 multithreading dans l'objective c

J'exécute un thread d'arrière-plan dans mon application avec dispatch_async et parfois mon thread principal et mon thread d'arrière-plan accèdent à la database en même time et cela me donnait une erreur de database et j'essayais de le résoudre en utilisant sqlite3_threadsafe () c'est-à-dire, je ne peux pas utiliser la même connection de database dans deux threads et je veux qu'il revienne 1 quelqu'un peut-il m'aider à cet égard

Je pense que vous poursuivez la mauvaise approche. SQLite n'est pas fiable pour les threads, peu importe comment vous le comstackz – voir la FAQ . Même si SQLite est compilé pour la security des threads, la même database ne peut pas être utilisée à partir de plusieurs threads si des transactions sont en attente ou si des instructions restnt non finalisées.

Les recommandations ci-dessus pour utiliser Grand Central Dispatch pour canaliser tous les access SQLite dans une queue d'expédition série sont la bonne façon de procéder à mon avis, bien que je reorderais plutôt de créer votre propre file plutôt que d'utiliser la queue principale la raison simple pour laquelle vous pouvez envoyer de manière fiable dispatch_sync quand vous voulez attendre un résultat.

Vous pouvez append toutes vos déclarations d'access, donc vous êtes toujours sur le fil principal lorsque vous accédez au magasin sqlite.

dispatch_async(dispatch_get_main_queue(), ^ { //code goes here });