Если это база данных только для чтения, попробуйте открыть ее с помощью
sqlite3_open_v2("path/to/database", &connection,
SQLITE_OPEN_READONLY | SQLITE_OPEN_FULLMUTEX, 0);
sqlite3_exec(connection,
"PRAGMA locking_mode = EXCLUSIVE; PRAGMA journal_mode = OFF;",
0, 0, &errmsg);
затем разделяем объект connection
между всеми вашими потоками. Это должно дать вам все преимущества в производительности, если оставить транзакцию открытой, не оставляя транзакцию открытой. (Возможно, вам не понадобится вторая команда. Я хотел бы думать, что SQLite был достаточно умен, чтобы признать, что ему не нужно блокировать или вести журнал для соединения только для чтения, но я не верю в это.)