假设我有:
stl::map<std::string, Foo> myMap;
以下函数线程安全吗?
myMap["xyz"] ?
即我想拥有这个在许多线程之间共享的巨大只读映射;但我不知道即使搜索它是否是线程安全的。
一切都先写入一次。
然后,多个线程从中读取。
我试图避免锁定以使其尽可能快。 (我知道,yaya 可能过早优化)
原文由 anon 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设我有:
stl::map<std::string, Foo> myMap;
以下函数线程安全吗?
myMap["xyz"] ?
即我想拥有这个在许多线程之间共享的巨大只读映射;但我不知道即使搜索它是否是线程安全的。
一切都先写入一次。
然后,多个线程从中读取。
我试图避免锁定以使其尽可能快。 (我知道,yaya 可能过早优化)
原文由 anon 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.1k 阅读✓ 已解决
1 回答979 阅读✓ 已解决
4 回答769 阅读
1 回答848 阅读
1 回答880 阅读
1 回答644 阅读
1 回答755 阅读
理论上没有 STL 容器是线程安全的。在实践中,如果容器没有被同时修改,读取是安全的。即该标准没有关于螺纹的规范。该标准的下一个版本将和 IIUC 将保证安全的只读行为。
如果您真的很担心,请使用带有二进制搜索的排序数组。