簡體   English   中英

如果像這樣使用 c++ std::unordered_map 會有風險嗎?

[英]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_typestd::unordered_set ,它是默認可構造的,所以沒有問題。

初始化后,地圖將在多線程中只讀

在這里你也是安全的,因為根據容器文檔

所有 const 成員函數都可以由同一容器上的不同線程並發調用。

因此,如果您只是讀取值而不修改它們,那沒關系。 如果您可以保證不同的線程正在訪問容器中的不同元素,您甚至可以執行寫操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM