所以我们创建了一张 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/