leveldb快照的线程安全性

leveldb快照的线程安全性,leveldb,Leveldb,读取快照是leveldb的完全线程安全操作吗 具体来说,, 一个线程读取leveldb数据库的快照,而另一个线程在同一数据库上读/写,这是线程安全的吗?那么另一个线程在读取时可能同时关闭数据库或删除快照呢?根据文档: 一次只能由一个进程打开数据库。leveldb实现从操作系统获取锁以防止误用。在单个进程中,同一个leveldb::DB对象可以由多个并发线程安全地共享。也就是说,不同的线程可以写入或获取迭代器,或者在同一数据库上调用Get,而无需任何外部同步(leveldb实现将自动执行所需的同步

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

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

根据文档:

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

根据文件:

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