假设我有:
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 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
理论上没有 STL 容器是线程安全的。在实践中,如果容器没有被同时修改,读取是安全的。即该标准没有关于螺纹的规范。该标准的下一个版本将和 IIUC 将保证安全的只读行为。
如果您真的很担心,请使用带有二进制搜索的排序数组。