Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
leveldb写回同步问题_Leveldb - Fatal编程技术网

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;
  }