C++:一个作者/多个读者访问 unordered_map 线程是否安全?

标签 c++ multithreading thread-safety unordered-map

我想构建一个 unordered_map,它具有来自一个写入器和多个读取线程的并发访问。作者只会插入一对,不会删除或更新任何插入的内容。这个线程安全吗?我可以将插入操作视为原子操作吗?我对我的代码进行了多次测试,没有发现崩溃或不正确的结果。

谢谢!

最佳答案

不,这不是线程安全的。您必须确保在您修改 unoredered_map 时没有人在阅读它。例如,如果由于 insert 而需要重新 HashMap ,那么您可以尝试读取正在修改的数据,即使它是不同的元素。

规则是:如果您有多个线程访问的共享数据,并且其中至少有一个是写入器,则您必须进行同步。


这并不是说您需要在阅读时屏蔽所有读者。您可以使用 std::shared_mutex允许多个读者同时读取,但当作者需要写入时,它将阻止所有读者。

关于C++:一个作者/多个读者访问 unordered_map 线程是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635678/

相关文章:

c - 在 C 中没有锁的线程之间共享 bool 值

multithreading - C中的posix pthreads

python - Django 中的中间件是线程安全的吗?

c++ - 如何比较并获取两个列表中未包含的值

c++ - 为什么不能使用 'enable_if' 在此处禁用此声明

c++ - 调整 token 权限 : ERROR_NOT_ALL_ASSIGNED after success

android - Nexus 5 进入休眠模式会使 Activity 生命周期出现问题

c++ - 打印 float 的精确值

java - Android Bitmap多线程处理——不是线程安全的?

java - 从另一个线程暂停线程,并从另一个线程停止/启动它