在实际使用和SQLite文档的上下文中,EnableWriteAheadLogging的线程安全性如何?

时间:2015-03-15 16:15:55

标签: android sqlite android-sqlite

android文档描述" EnableWriteAheadLogging"在这里:

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#enableWriteAheadLogging()

"此方法支持从同一数据库中的多个线程并行执行查询"

但是,根据SQLite文档:https://www.sqlite.org/threadsafe.html

SQLite有两种多线程:"序列化"和" Mulit-thread"。使用" EnableWriteAheadLogging"?

时使用哪一个

此外,如果我的应用程序和后台服务都需要访问我的数据库,那么使用EnableWriteAheadLogging是否有帮助?我应该采取哪些措施来确保以线程安全的方式完成此操作?

1 个答案:

答案 0 :(得分:2)

这与线程安全性无关。

在WAL模式下,编写器不会阻止读者,因此Android框架认为在这种情况下使用更大的连接池是个好主意。

或者可能不是,正如this comment所示:

private void setMaxConnectionPoolSizeLocked() {
    if ((mConfiguration.openFlags & SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING) != 0) {
        mMaxConnectionPoolSize = SQLiteGlobal.getWALConnectionPoolSize();
    } else {
        // TODO: We don't actually need to restrict the connection pool size to 1
        // for non-WAL databases. There might be reasons to use connection pooling
        // with other journal modes. For now, enabling connection pooling and
        // using WAL are the same thing in the API.
        mMaxConnectionPoolSize = 1;
    }
}