我想创建一个系统,将XML文件中的选项加载到ptree中,并在多个线程中访问该ptree。
Sofar,我很生气一个简单的类,每个线程都可以访问它,其中包含方法put(id)和get()。
不幸的是,ptree似乎不是线程安全的,因此程序崩溃了很多。
有没有办法使ptree线程安全?还是有更好的解决方案?

最佳答案

您可以使用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,并且锁将锁定互斥锁,所以您永远不会出现争用条件。

10-04 12:58