当多个线程仅进行读取操作而不进行写入操作时,您不需要同步访问。C++11标准的第1.10段定义了与数据竞争相关的冲突操作:如果其中一个表达式评估修改了内存位置(1.7),另一个表达式评估访问或修改相同的内存位置,则两个表达式评估发生冲突。然后,根据1.10/21:如果程序包含在不同线程中具有冲突操作的两个动作,其中至少一个动作不是原子的,并且没有一个先于另一个发生,则程序的执行包含数据竞争。[...]
const
操作必须是线程安全的(参见this)。由于boost::unordered_map
启发了std::unorderded_map
,如果不是这种情况,我会非常惊讶。 - Andy Prowl