microsoft PPL库:concurrent_vector push_back数据只有一次

时间:2011-11-11 11:27:07

标签: concurrency concurrent-vector

我有一个Concurrency :: concurrent_vector,并希望push_back线程安全一个新元素,以防它不存在(这就是为什么我必须先执行搜索)。我怎么能做到这一点? 我需要一个并发集合,它在迭代器访问时是线程安全的(写入,读取相同的元素),并且还允许我在上面写的内容。

问题改进: 如果它主要是同时搜索的话,最好的容器是什么,如果找不到元素(更罕见),则需要插入/ push_back,如果找到搜索元素(大多数情况下)更新到元素是需要(同一迭代器的并发更新)

从VS2010中已有的内容我看到concurrent_vector但是更新同一个元素并不安全,而且似乎我需要一个额外的锁以防万一找不到元素而且我需要添加一个元素因为那。你怎么看 ?有什么我可以用来消除外部锁(整个集装箱锁)?

1 个答案:

答案 0 :(得分:0)

对于所描述的情况,最好的方法是使用(来自Visual Studio)concurrent_unordered_map容器,它是一个基于散列的容器,用于确保并发迭代,迭代器访问(只要对同一元素值的更新/读取进行同步!),push_back-s,基于key(​​operator [])的元素访问。

容器实现作为Concurrency Runtime Sample Pack的一部分提供 如果没有必要通过密钥查找,也可以使用其他并发容器: http://msdn.microsoft.com/en-us/library/dd504906.aspx