ano*_*non 14 c++ multithreading dictionary std c++-standard-library
假设我有:
stl::map<std::string, Foo> myMap;
Run Code Online (Sandbox Code Playgroud)
以下函数线程安全吗?
myMap["xyz"] ?
Run Code Online (Sandbox Code Playgroud)
即我想拥有许多线程共享的巨型只读映射; 但我不知道即使搜索也是线程安全的.
一切都是先写的.
然后,从中读取多个线程.
我正试图避免锁定,使其成为尽可能多的事情.(yaya可能过早优化我知道)
dal*_*lle 12
C++ 11要求声明的所有成员函数const
对多个读者都是线程安全的.
调用myMap["xyz"]
不是线程安全的,因为std::map::operator[]
未声明为const
.myMap.at("xyz")
但是,调用是线程安全的,如std::map::at
声明的那样const
.
ton*_*ony 11
理论上,没有STL容器是线程安全的.实际上,如果不同时修改容器,则读取是安全的.即标准没有规定线程.标准的下一个版本将和IIUC一起保证安全的只读行为.
如果您真的担心,请使用带二进制搜索的排序数组.
归档时间: |
|
查看次数: |
17322 次 |
最近记录: |