我想创建一个系统,将XML文件中的选项加载到ptree中,并在多个线程中访问该ptree。索弗,我疯了一个简单的类,每个线程都可以访问它,其中包含方法put(id)和get()。不幸的是,ptree似乎不是线程安全的,因此程序崩溃了很多。有没有办法使ptree线程安全?还是有更好的解决方案?
您可以使用本博客文章中介绍的守护程序模板结构。
基本上,您将创建一个,guardian<ptree>
而不是Plain 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
通过锁访问内部,而锁将锁定互斥锁,因此您将永远不会出现竞争状况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句