我有一个C ++进程初始化一个存储在std::map
某些数据中的类,然后是另一个类 - 它将在一个线程中执行 - 我向其传递一个指针(我也试过了引用第一个类,因为它需要访问std::map
的内容(使用getter)。
当我从主线程更新时,第一类std::map
的数据永远不会更新。
我的问题是我的问题导致我使用了一个线程,以便复制对象,然后没有收到更新? 以及如何解决这个问题?
谢谢
答案 0 :(得分:2)
不,std::map
是一个普通的容器,与线程无关。很可能你的线程之间存在同步问题,例如一个线程在另一个线程正在更新地图之前或同时查看地图的竞争条件。在这些情况下可能会发生奇怪的事情,因为std::map
可能会在添加,更改或删除某些内容时重新平衡树时更改大量内部指针。另一个同时看地图的线索可能会“混淆”。
从任一线程访问地图时尝试使用信号量或互斥量,看看是否能解决您的问题。
答案 1 :(得分:0)
首先感谢大家的评论(即使是没有帮助的评论)。
我终于找到了我的问题。
我正在使用Boost信号来更新包含std::map
的类,并在没有&
的情况下传递我的类实例化,因此正在处理副本。