我知道有关同时查找和插入的其他类似问题,我的问题专门针对同时查找和插入相同的密钥。
针对容器要求的每个c ++ 14标准23.2.5“ 15.如果(N + n) 根据此要求,如果我使用unordered_map的reserve方法来预分配存储桶,则应注意大多数赛车情况。但是,如果您同时从多个线程中插入并找到SAME KEY,该怎么办? 更新:我真正的意思是在同时插入时会发现读取垃圾?
我花了一些时间阅读gcc的实现。
如果一个线程使用]插入>
unordered_map mp;mp [key] = value;
而一个线程使用以下命令读取:自动= mp.find(key);//然后使用它来访问键值对]
然后,使用find()返回的迭代器可能会导致垃圾,因为这是在mp [key] = value:]期间发生的事情>
find(key)可以在步骤2之后且步骤3完成之前读取垃圾。
如果我们使用unordered_map :: insert,则将有所不同,因为发生的事情是:
因此,当使用find(key)时,unordered_map无法找到键值对,或者键值对已完全创建。
这是我对实现的理解。如果我错了,请纠正我。