Не обязательно. Если sqlite3 скомпилирован с потокобезопасным макросом (проверьте с помощью функции
int sqlite3_threadsafe(void)
), вы можете попытаться получить доступ к одной и той же БД из нескольких потоков без риска повреждения. Однако, в зависимости от требуемой блокировки, вы можете или не можете реально изменять данные (я не верю, что sqlite3 поддерживает блокировку строк, а это значит, что для записи вам понадобится блокировка таблицы). Тем не менее, вы можете попробовать; если один поток блокируется, то он автоматически запишет, как только другой поток завершит работу с БД.