我想构建一个 unordered_map,它具有来自一个写入器和多个读取线程的并发访问。作者只会插入一对,不会删除或更新任何插入的内容。这个线程安全吗?我可以将插入操作视为原子操作吗?我对我的代码进行了多次测试,没有发现崩溃或不正确的结果。
谢谢!
最佳答案
不,这不是线程安全的。您必须确保在您修改 unoredered_map
时没有人在阅读它。例如,如果由于 insert
而需要重新 HashMap ,那么您可以尝试读取正在修改的数据,即使它是不同的元素。
规则是:如果您有多个线程访问的共享数据,并且其中至少有一个是写入器,则您必须进行同步。
这并不是说您需要在阅读时屏蔽所有读者。您可以使用 std::shared_mutex
允许多个读者同时读取,但当作者需要写入时,它将阻止所有读者。
关于C++:一个作者/多个读者访问 unordered_map 线程是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635678/