Один поток пишет в структуру, другие потоки читают. Требуется обеспечить транзакционность записи (т.е. чтобы при обновлении двух полей, потоки чтения не могли получить возможность прочитать наполовину обновленные данные).
В идеале для чтения иметь метод const Foo& get() const;
В текущей реализации используется подход с мьютексами и хранением отдельных для каждого потока копий в std::map.
void ConfigUpdater::set(const Config& config)
{
MutexGuard mutexGuard(mutex);
this->config = config;
}
const Config& ConfigUpdater::get() const
{
MutexGuard mutexGuard(mutex);
return copies.emplace(boost::this_thread::get_id(), config).first->second;
}
Возможно есть лучшее решение, подскажите в какую строну копать.
Ответ
Можно воспользоваться std::shared_lock
Комментариев нет:
Отправить комментарий