From my limited experience and understanding, I believe concurrent reads are OK, and concurrent writes are queued internally. As long as you don't mix the order of the writes you're doing, SQLite can queue them to as best as it can.
The database file itself is safe for concurrent use, but the internal sqlite3 database structure itself can be unsafe to share across thread, depending on how your sqlite3 library was compiled. See https://www.sqlite.org/threadsafe.html
My sole reference: https://www.sqlite.org/lockingv3.html