如果我只向映射添加条目并修改它们,但不删除,是否需要对 c++ unordered_map 使用同步?

问题描述 投票:0回答:1

我有一个回调,每次创建或终止进程时都会调用该回调。

现在我有一个映射,每个条目都是一个进程ID,并且它包含进程信息。我在进程创建时将进程设置为活动状态,并在进程终止时将其设置为死亡状态。如果创建了一个 pid 为死进程的新进程,我只需用新的 pid 信息替换旧的 pid 信息即可。

现在假设在这种情况下内存不是问题。

我的问题是,每当我想在场景中修改条目或添加/删除时,我是否真的需要使用同步机制(例如 std::mutex)来锁定它?如果是这样,为什么?

因为除非真的必须,否则我不想放慢这个程序的速度,因为速度是这里的首要任务。

c++ c++11
1个回答
0
投票

除非标准明确规定标准库类型的接口是线程安全的(或者您始终在该对象上使用

const
方法),否则对同一对象的此类并发访问是不是线程安全的。

并且没有任何形式的

map
在这方面有任何具体的陈述。因此,对对象的所有修改访问都会被同等对待:如果两个(或多个)线程尝试访问该对象并且其中一个访问正在修改,则这是一种数据竞争,除非您在访问之间应用适当的同步。

© www.soinside.com 2019 - 2024. All rights reserved.