gpt4 book ai didi

c++ - 如果在此调用之前未创建 abcd, `std::map<..> a; blah = a[abcd];` 线程安全吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:56 25 4
gpt4 key购买 nike

所以我们创建了一个 map 。我们想要获取 some_type blah = map_variable[some_not_inserted_yet_value] 如果之前没有创建,这将调用向 map 添加新项目。所以我想知道使用 std::map read 是否真的是线程安全的,或者只能安全线程 try{ ...find(..)->second...?

最佳答案

调用 find(...)->second 是线程安全的想法很大程度上取决于您对线程安全的看法。如果您只是说它不会崩溃,那么只要没有人在您阅读它的同时改变字典,我想您就没问题。

也就是说,事实上,无论您的最低线程安全要求是什么,调用 operator[] 方法本质上都是线程安全的,因为它可以改变集合.

如果一个方法没有 const 重载,这意味着它可以改变对象,所以除非文档表明方法是线程安全的,否则该方法不太可能是线程安全的。

然后,const 方法也可能不是线程安全的,因为您的对象可能依赖于非const 全局状态或具有可变 字段,因此如果您像使用非同步类一样使用非同步类,则需要非常非常小心。

关于c++ - 如果在此调用之前未创建 abcd, `std::map<..> a; blah = a[abcd];` 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com