leveldb 快照的线程安全

upd*_*liu 3 leveldb

读取快照是 leveldb 的完全线程安全操作吗?

具体来说,一个线程读取 leveldb 数据库的快照,而另一个线程在同一数据库上读取/写入是否线程安全?那么另一个线程可能在读取时同时关闭数据库或删除快照呢?

Jor*_*ans 5

根据文档:

一个数据库一次只能被一个进程打开。leveldb 实现从操作系统获取锁以防止误用。在单个进程中,同一个 leveldb::DB 对象可以被多个并发线程安全地共享。即,不同的线程可以在没有任何外部同步的情况下写入或获取迭代器或调用同一数据库上的 Get(leveldb 实现将自动执行所需的同步)。然而,其他对象(如 Iterator 和 WriteBatch)可能需要外部同步。如果两个线程共享这样一个对象,它们必须使用自己的锁定协议来保护对它的访问。公共头文件中提供了更多详细信息。

https://github.com/google/leveldb/blob/master/doc/index.md#concurrency