gpt4 book ai didi

c++ - 使用 std::map 时必须互斥的所有操作/函数是什么

转载 作者:行者123 更新时间:2023-11-30 00:46:20 24 4
gpt4 key购买 nike

我有一个 std::map,它结合了元组作为键和值 vector ,例如

using ReqList=map<const Attrib,vector<REQ>,less<key_comp>>;//Attrib 是一个元组。

使用此映射,线程将查找键并在键是新键时执行插入,或者如果已经有键则只填充 vector ,然后进行某种形式的删除,如

ReqList l;
begin(l[A])=move(l[A].back());
//从值 vector 中删除第一个元素

我一直在做插入、查找、操作值和某种删除(第一个元素)..所以每个提到的操作或函数调用都需要互斥吗?或者我只能将某些东西放在 Mutex 下。 std::map 是否提供任何默认同步?

最佳答案

这真的很简单:如果您在“从 map 读取”的同时“写入 map ”同时,那么您需要同步这些操作 - 例如通过使用互斥锁来保护它们。

“写入 map ”是指调用 map 的任何非 const 成员函数,而“从 map 读取”是指调用任何 const 成员函数。

对于同时,我的意思是有多个线程可能写入或读取 map 。因此,单线程程序不需要同步。

如果您在某个时间点写入 map ,然后绝对确定不会再进行写入,那么之后所有从 map 的读取都可以不同步地完成。例如,如果您在一个线程的工厂函数中设置了一个映射,并且在设置之后再也不会写入它,那么任何其他线程都可以从中不同步地读取。请注意,本地图超出范围时,其析构函数将运行并将其写入;在此之前,所有可能的非同步读取都必须已经完成。

关于c++ - 使用 std::map 时必须互斥的所有操作/函数是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859102/

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