I think you are pursuing the wrong approach. SQLite is not thread safe, no matter how you compile it - see the FAQ . Even if SQLite is compiled to ensure thread safety, the same database cannot be used from multiple threads if any transactions are expected or any statements remain incomplete.
The recommendations above to use Grand Central Dispatch to redirect all SQLite queries to the sequential send sequence are the correct way to act in my opinion, although I would be more likely to recommend you create your own queue rather than using the main queue for that simple the reason is that you can reliably send dispatch_sync when you want to wait for the result.