我想创建一个系统,它将XML文件中的选项加载到ptree中,并在多个线程中访问此ptree。 Sofar,我疯了一个简单的类,每个线程都可以访问,包含方法put(id)和get()。 不幸的是,ptree似乎并不是线程安全的,所以程序崩溃了很多。 有没有办法让ptree线程安全?或者是否有更好的解决方案?
答案 0 :(得分:1)
您可以使用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
,而锁锁定互斥锁,你将永远不会有竞争条件。