Acess boost ptree в нескольких потоках

0

Я хотел бы создать систему, которая загружает параметры из XML файла в ptree и обрабатывает этот ptree через несколько потоков. Sofar, я имею безумный простой класс, доступный для каждого потока, который содержит методы put (id) и get(). К сожалению, ptree не является потокобезопасным, поэтому программа сильно падает. Есть ли способ сделать ptree threadsafe? Или есть лучшее решение для всех вместе?

  • 1
    почему вы не используете мьютекс в операциях get, get?
  • 0
    K, плохо посмотри на это, спасибо
Теги:
thread-safety
boost
boost-propertytree

1 ответ

1
Лучший ответ

Вы можете использовать структуру шаблонов-хранителей, описанную в этом сообщении блога.

В принципе, вы создадите guardian<ptree> вместо простого ptree. Опекун - непрозрачная структура, которая содержит mutex рядом с его данными. Единственный способ доступа к данным - через guardian_lock, который блокирует mutex.

guardian<ptree> xml;

//thread 1
{
  guardian_lock<ptree> lock(xml);
  lock->put("a", "b");
}

//thread 2
{
  guardian_lock<ptree> lock(xml);
  lock->put("c", "d");
}

Поскольку вы можете получить доступ только к внутреннему ptree через замок, а блокировка блокирует мьютекс, у вас никогда не будет условий гонки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню