kwa*_*hwa 8 c++ multithreading mutex stdmap c++14
我正在使用std :: 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这会将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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |