在多线程环境下不加锁使用std map安全吗? 保证两个线程永远不会操作映射中的相同条目。
关于这个已经有一个问题,但我对多个线程访问映射中不同条目的情况特别感兴趣。特别是无序 map 。
最佳答案
只要没有线程在修改 map ,它就是安全的。如果线程修改映射的不同元素也是安全的(前提是元素本身不会通过例如修改某些全局状态导致竞争条件):
在17.6.5.9 避免数据竞争中,标准库保证并发 const
对容器的访问是安全的(至少就容器而言是这样。如果元素允许通过 const
访问进行突变,则元素级别可能存在数据竞争。)
在23.2.2 容器数据竞争中进一步保证:如果修改/读取容器的不同元素,非常量并发访问是安全的1。
一旦您有一个线程对容器或容器中的同一元素进行修改,而其他线程正在读取或写入,您就会面临竞争条件和未定义的行为。
1 除了 std::vector<bool>
关于c++ - std::map 中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29226578/