读取快照是级别of的完全线程安全操作吗?
具体来说,一个线程读取一个级别数据库的快照,而另一个线程在同一个数据库上读取/写入快照,这是否是线程安全的呢?如果另一个线程可以同时关闭数据库或删除读取过程中的快照呢?
发布于 2015-04-07 20:00:04
根据医生的说法:
数据库一次只能由一个进程打开。级别数据库实现从操作系统获取锁以防止误用。在单个进程中,相同的DB::DB对象可能由多个并发线程安全地共享。也就是说,不同的线程可以在没有任何外部同步的情况下写入、获取迭代器或调用Get在同一个数据库上( leveldb实现将自动完成所需的同步)。但是,其他对象(如Iterator和WriteBatch)可能需要外部同步。如果两个线程共享这样一个对象,它们必须使用自己的锁定协议保护对它的访问。更多详细信息可在公共头文件中获得。
https://github.com/google/leveldb/blob/master/doc/index.md#concurrency
https://stackoverflow.com/questions/23188037
复制相似问题