我有一个回调,每次创建或终止进程时都会调用该回调。
现在我有一个映射,每个条目都是一个进程ID,并且它包含进程信息。我在进程创建时将进程设置为活动状态,并在进程终止时将其设置为死亡状态。如果创建了一个 pid 为死进程的新进程,我只需用新的 pid 信息替换旧的 pid 信息即可。
现在假设在这种情况下内存不是问题。
我的问题是,每当我想在场景中修改条目或添加/删除时,我是否真的需要使用同步机制(例如 std::mutex)来锁定它?如果是这样,为什么?
因为除非真的必须,否则我不想放慢这个程序的速度,因为速度是这里的首要任务。
除非标准明确规定标准库类型的接口是线程安全的(或者您始终在该对象上使用
const
方法),否则对同一对象的此类并发访问是不是线程安全的。
并且没有任何形式的
map
在这方面有任何具体的陈述。因此,对对象的所有修改访问都会被同等对待:如果两个(或多个)线程尝试访问该对象并且其中一个访问正在修改,则这是一种数据竞争,除非您在访问之间应用适当的同步。