0

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

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

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

谢谢

4

2 回答 2

2

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

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

于 2013-04-23T19:49:38.370 回答
0

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

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

于 2013-04-24T18:19:18.760 回答