从线程访问对象(使用引用或指针)

时间:2013-04-23 19:36:10

标签: c++ multithreading object pointers reference

我有一个C ++进程初始化一个存储在std::map某些数据中的类,然后是另一个类 - 它将在一个线程中执行 - 我向其传递一个指针(我也试过了引用第一个类,因为它需要访问std::map的内容(使用getter)。

当我从主线程更新时,第一类std::map的数据永远不会更新。

我的问题是我的问题导致我使用了一个线程,以便复制对象,然后没有收到更新? 以及如何解决这个问题?

谢谢

2 个答案:

答案 0 :(得分:2)

不,std::map是一个普通的容器,与线程无关。很可能你的线程之间存在同步问题,例如一个线程在另一个线程正在更新地图之前或同时查看地图的竞争条件。在这些情况下可能会发生奇怪的事情,因为std::map可能会在添加,更改或删除某些内容时重新平衡树时更改大量内部指针。另一个同时看地图的线索可能会“混淆”。

从任一线程访问地图时尝试使用信号量或互斥量,看看是否能解决您的问题。

答案 1 :(得分:0)

首先感谢大家的评论(即使是没有帮助的评论)。

我终于找到了我的问题。 我正在使用Boost信号来更新包含std::map的类,并在没有&的情况下传递我的类实例化,因此正在处理副本。