跨多个线程访问ptree

274

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

CE格瑟

您可以使用本博客文章中介绍守护程序模板结构

基本上,您将创建一个,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

跨多个线程访问字符串

跨多个线程管理状态

使用ReactiveUI RouterViewHost的无效跨线程访问

跨不同线程的ThreadLocal值访问

无效的跨线程访问Windows Azure

WPF高度并行的跨线程UI访问

多个Java线程并控制跨多个内核的线程分配

跨多个工作线程的 Kubernetes HA 数据

使用 input_producer/limit_epochs/epochs:0 局部变量跨多个线程访问纪元值

从多个线程访问类对象

跨多个窗口访问项目和属性

跨多个函数访问类指针

跨线程操作无效:控件“ textBox1”从创建该线程的线程之外的线程访问

跨线程操作无效:无法从创建该线程的线程访问该线程的控件

“跨线程操作无效:从创建该线程的线程以外的线程访问控件。”

无效的跨线程访问Backgroundworker错误C#

修改JVM以序列化跨线程的文件访问

跨线程操作无效:控件“ statusStrip”是从不是在其上创建的线程的线程访问的

跨线程操作无效:从不是其创建线程的线程访问控件“ ListView1”

访问从不同线程访问的控件时如何处理无效的跨线程操作?

Java:跨多个服务器同步线程

跨多个线程使用存储库类对象

从多个用户线程访问ProcessContext :: forward

在多个线程上访问 ViewContext 导致崩溃

通过多个线程访问文件

多个线程同时访问相同的功能

允许图像被多个线程访问

Angularjs:跨多个控制器设置可访问的服务

使用 URL 重定向跨多个域访问 HttpOnly cookie