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