我想要创建一个系统,它将XML文件中的选项加载到ptree中,并跨多个线程访问这个ptree。Sofar,我有一个简单的类,每个线程都可以访问它,它包含了put(id)和get()方法。不幸的是,ptree似乎并不是threadsafe,所以程序经常崩溃。有没有办法,使ptree线程安全?还是有更好的解决方案?
发布于 2014-02-19 13:05:29
您可以使用描述的int 这篇博客文章的守护模板结构。
基本上,您将创建一个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,而锁则锁定互斥对象,因此永远不会有竞争条件。
https://stackoverflow.com/questions/21880032
复制相似问题