从线程访问对象(使用引用或指针)
Accessing object (using reference or pointer) from a thread
我有一个c++进程,初始化一个类,存储在std::map
一些数据,然后另一个类-将在线程中执行-我传递第一个类的指针(我也尝试过引用),因为它需要访问std::map
的内容(使用getter)。
发生的事情是,当我从主线程更新时,第一个类的std::map
的数据永远不会更新。
我的问题是我的问题导致我使用一个线程,以便对象被复制,然后没有收到更新?如何解决这个问题呢?
谢谢
不,std::map
是一个普通容器,与线程无关。最有可能的是,线程之间存在同步问题,例如一个线程在另一个线程更新映射之前或同时查看映射的竞争条件。在这些情况下可能会发生奇怪的事情,因为当添加、更改或删除某些内容时,std::map
可能会在重新平衡树时更改许多内部指针。在同一时间查看地图的另一个线程可能会"困惑"。
尝试使用信号量或互斥锁从两个线程访问映射,看看是否解决你的问题。
首先感谢大家的评论(即使是没有帮助的评论)。
我终于找到我的问题。我使用Boost信号来更新包含std::map
的类,并且在没有&
的情况下传递我的类实例化,因此正在制作副本。
相关文章:
- C++取消引用指针.为什么会发生变化
- 深层复制具有自引用指针的类
- Visual c ++,使用字符串引用/指针调用 dll 函数
- std::unordered_map::提取引用/指针失效
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 如何在 c++ 中使用带有数学运算的引用/指针?
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- 取消引用指针并立即为其分配变量,导致分段错误
- 如何获取指向类(而不是对象)的引用/指针
- 将类型参数传递给自引用指针
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 在析构函数内取消引用指针时出现分段错误
- 来自引用指针的内存泄漏
- 引用指针后面的值
- 无法取消引用指针
- 引用指针调用成员函数
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- 取消引用指针以创建数组的副本
- 有关启动引用指针的引用的问题