gpt4 book ai didi

c++ - 我可以在从另一个线程插入/删除时访问 C++11 std::map 条目吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:00 25 4
gpt4 key购买 nike

我可以在另一个线程插入/删除条目时访问(不锁定)std::map 条目吗?

示例伪 C++:

typedef struct {
int value;
int stuff;
}some_type_t;

std::map<char,some_type_t*> my_map;

//thread 1 does:
my_map.at('a')->value = 1;

//thread 2 does:
some_type_t* stuff = my_map.at('b');

//thread 3 does:
my_map.erase('c');

//I'm not modifying any elements T is a pointer to an previously allocated "some_type_t"

std C++11 规定所有成员都应该是线程安全的(erase() 不是 const)。

最佳答案

没有。是的。

两个或多个线程可以执行const一张图上的作业,这里有几个非const操作也很重要(返回非 const 迭代器的操作,因此不是 const ,如 begin 和类似的东西)。

您还可以修改 map 的元素的非键组件或 set而其他不读/写/销毁所述元素的非关键组件的操作则运行(这是大多数操作,除了 erase= 之类的东西)。

你不能eraseinsert或其他类似的非常量映射操作,同时使用 const 做任何事情和类似的 map 操作(如 findat )。注意 []可以类似于 erase如果添加了元素。

该标准有一个明确的非 const 列表。算作 const 的操作出于线程安全的目的——但它们基本上是返回 iterator 的查找。或 & .

关于c++ - 我可以在从另一个线程插入/删除时访问 C++11 std::map 条目吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25994312/

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