gpt4 book ai didi

c++ - 在锁下清除 std::map 与移动到临时对象

转载 作者:可可西里 更新时间:2023-11-01 17:55:35 26 4
gpt4 key购买 nike

我正在使用 std::map 并且其中有大量元素。如果我需要清除 map ,我可以在上面调用 clear() 。清除可能需要一些时间,特别是如果在多线程环境中的锁定下完成,它可能会阻止其他调用。为了避免调用 clear(),我尝试了这个:

std::mutex m;
std::map<int, int> my_map; // the map which I want to clear

void func()
{
std::map<int, int> temp_map;
{
std::lock_guard<std::mutex> l(m);
temp_map = std::move(my_map);
}
}

这会将 my_map 移动到锁下的 temp_map,这将清空它。然后一旦 func 结束,temp_map 将被销毁。

这是防止长时间获取锁的更好方法吗?有任何性能影响吗?

最佳答案

我建议使用 swap 而不是 move。移动的对象不能保证实际上是空的或什至可用。但是使用 swap 和一个新创建的对象,您可以确定结果:

void func()
{
std::map<int, int> temp_map;
using std::swap;
{
std::lock_guard<std::mutex> l(m);
swap(my_map, temp_map);
}
}

关于c++ - 在锁下清除 std::map 与移动到临时对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44709333/

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