像这样使用c++ std::unordered_map有风险吗?



像这样使用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是线程安全的。初始化后,映射将只能在多线程中读取。我认为它也是线程安全的。

我不确定我是否可以像这样使用insert。因为它会生成一个unordered_set和一对当没有val of key "circle"时。代码工作正常。我只是想确保它没有潜在的风险。

(我不擅长英语写作。)

谢谢。

我不确定是否可以这样使用insert

可以,因为操作符[]

返回映射到key的值的引用,如果该键不存在则执行插入操作。

您的value_typestd::unordered_set,它是默认可构建的,所以没有问题。

初始化后,map将在多线程中只读

这里也是安全的,因为根据容器文档

所有const成员函数可以由同一容器上的不同线程并发调用。

所以如果你只是读取值而不修改它们,那是可以的。如果你能保证不同的线程访问容器中的不同元素,你甚至可以执行写操作。

相关内容

  • 没有找到相关文章

最新更新