Почему leveldb использует одну блокировку для защиты состояния?C++

Программы на C++. Форум разработчиков
Anonymous
Почему leveldb использует одну блокировку для защиты состояния?

Сообщение Anonymous »

Я видел следующий код в leveldb:

Код: Выделить всё

  // State below is protected by mutex_
port::Mutex mutex_;
std::atomic shutting_down_;
port::CondVar background_work_finished_signal_ GUARDED_BY(mutex_);
MemTable* mem_;
MemTable* imm_ GUARDED_BY(mutex_);  // Memtable being compacted
std::atomic has_imm_;         // So bg thread can detect non-null imm_
WritableFile* logfile_;
uint64_t logfile_number_ GUARDED_BY(mutex_);
log::Writer* log_;
uint32_t seed_ GUARDED_BY(mutex_);  // For sampling.

// Queue of writers.
std::deque writers_ GUARDED_BY(mutex_);
Почему leveldb использует мьютекс для защиты дека writers_ (используется для хранения операций записи) и memtable imm_ вместо использования блокировки чтения-записи синхронизировать операции записи? В чем преимущество такого подхода?


Подробнее здесь: https://stackoverflow.com/questions/782 ... -the-state

Вернуться в «C++»