Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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