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

Accessing object (using reference or pointer) from a thread

本文关键字:引用 指针 线程 访问 对象      更新时间:2023-10-16

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

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

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

谢谢

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

尝试使用信号量或互斥锁从两个线程访问映射,看看是否解决你的问题。

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

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