【问题标题】:Acess boost ptree across multiple threads跨多个线程访问 boost ptree
【发布时间】:2014-02-19 12:08:14
【问题描述】:

我想创建一个系统,将 XML 文件中的选项加载到 ptree 中,并跨多个线程访问这个 ptree。 到目前为止,我已经创建了一个简单的类,每个线程都可以访问它,它包含方法 put(id) 和 get()。 不幸的是,ptree 似乎不是线程安全的,所以程序经常崩溃。 有没有办法使 ptree 线程安全?还是有更好的解决方案?

【问题讨论】:

  • 为什么不在 put、get 操作中使用互斥锁?
  • K,我看看,谢谢

标签: c++ xml boost thread-safety boost-propertytree


【解决方案1】:

您可以使用 guardian 模板结构描述 int this blog post

基本上,您将创建一个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,并且锁会锁定互斥体,因此您将永远不会有竞争条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多