SQLite поддерживает многопоточность. Вы можете разделить свой дескриптор / объект соединения между потоками, они хорошо синхронизируют свой доступ.
EDIT: передать объект sqlite3
(тот, который sqlite3_open()
возвращает в качестве второго параметра) в поток вместо повторного открытия базы данных в потоке. Как то так:
sqlite3 *MyDatabase; //Initialized somewhere
NSArray *DataForThread = [NSArray arrayWithObjects:
request,
[NSValue valueWithPointer: MyDatabase],
nil];
[self performSelectorInBackground:@selector(processResponseInBackground:) withObject:DataForThread];
Внутри потока восстановите объект SQLite3 следующим образом:
sqlite3 *MyDatabase = [[ThreadData objectAtIndex:1] pointerValue];