读取快照是 leveldb 的完全线程安全操作吗?
具体来说,一个线程读取 leveldb 数据库的快照,而另一个线程在同一个数据库上读/写是线程安全的吗?那么另一个线程可能同时关闭数据库或删除读取中的快照呢?
读取快照是 leveldb 的完全线程安全操作吗?
具体来说,一个线程读取 leveldb 数据库的快照,而另一个线程在同一个数据库上读/写是线程安全的吗?那么另一个线程可能同时关闭数据库或删除读取中的快照呢?
根据文档:
一个数据库一次只能由一个进程打开。leveldb 实现从操作系统获取锁以防止误用。在单个进程中,同一个 leveldb::DB 对象可以被多个并发线程安全地共享。即,不同的线程可能会在没有任何外部同步的情况下写入或获取迭代器或在同一个数据库上调用 Get(leveldb 实现将自动执行所需的同步)。然而,其他对象(如 Iterator 和 WriteBatch)可能需要外部同步。如果两个线程共享这样一个对象,它们必须使用自己的锁定协议来保护对它的访问。公共头文件中提供了更多详细信息。
https://github.com/google/leveldb/blob/master/doc/index.md#concurrency