leveldb写回同步问题
如果我有leveldb写回同步问题,leveldb,Leveldb,如果我有 using (WriteBatch batch = new WriteBatch()) { for(int i=0; i<100; i++) { batch.Put(i.ToString(), i.ToString()) } leveld_db.Write(batch); } 使用(WriteBatch批处理=new WriteBatch()) { 对于(int i=0;i假设您想知道leveldb中WriteBatch操作的线程
using (WriteBatch batch = new WriteBatch())
{
for(int i=0; i<100; i++)
{
batch.Put(i.ToString(), i.ToString())
}
leveld_db.Write(batch);
}
使用(WriteBatch批处理=new WriteBatch())
{
对于(int i=0;i假设您想知道leveldb中WriteBatch操作的线程安全性。
答案是肯定的,此操作是线程安全的。事实上,leveldb中的每个操作都是使用WriteBatch实现的:
Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice& value) {
WriteBatch batch;
batch.Put(key, value);
return Write(opt, &batch);
}
写入操作排队以避免赛车:
writers_.push_back(&w);
while (!w.done && &w != writers_.front()) {
w.cv.Wait();
}
if (w.done) {
return w.status;
}
writers_.push_back(&w);
while (!w.done && &w != writers_.front()) {
w.cv.Wait();
}
if (w.done) {
return w.status;
}