[英]Does it risk if use c++ std::unordered_map like this?
如果像這樣使用 c++ std::unordered_map 會有風險嗎?
std::unordered_map<std::string, std::unordered_set<std::shared_ptr<SomeType>>> _some_map;
...
void init() {
auto item = std::make_shared<SomeType>();
_some_map["circle"].insert(item);
}
_some_map 是一個成員變量。 init() 函數只能調用一次,因此 insert 是線程安全的。 初始化后,地圖將在多線程中只讀。 我認為它也是線程安全的。
我不確定我是否可以像這樣使用插入。 因為當沒有鍵“circle”的val時,它會生成一個unordered_set和一個pair。 代碼正常工作。 只是想確保它沒有潛在風險。
(我不擅長英文寫作。)
謝謝你。
我不確定我是否可以像這樣使用插入。
是的,你可以,因為operator[]
返回對映射到與 key 等效的鍵的值的引用,如果這樣的鍵不存在,則執行插入。
您的value_type
是std::unordered_set
,它是默認可構造的,所以沒有問題。
初始化后,地圖將在多線程中只讀
在這里你也是安全的,因為根據容器文檔
所有 const 成員函數都可以由同一容器上的不同線程並發調用。
因此,如果您只是讀取值而不修改它們,那沒關系。 如果您可以保證不同的線程正在訪問容器中的不同元素,您甚至可以執行寫操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.