0

我有一个 Concurrency::concurrent_vector 并且只想在新元素不存在的情况下才推送_back线程安全(这就是我必须先执行搜索的原因)。我怎样才能做到这一点?我需要一个并发集合,它在迭代器访问(写入,读取相同元素)时是线程安全的,并且还允许我上面写的内容。

问题细化:如果主要是同时搜索,最好使用什么容器需要(同一个迭代器的并发更新

从 VS2010 中已经提供的内容中,我看到了 concurrent_vector,但更新相同的元素并不安全,而且似乎我需要一个额外的锁以防找不到元素,因此我需要添加一个元素。你怎么看 ?有什么东西可以用来消除外部锁(整个容器锁)吗?

4

1 回答 1

0

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

容器实现作为并发运行时示例包的一部分提供 如果不需要按键查找,也可以使用其他并发容器:http: //msdn.microsoft.com/en-us/library/dd504906.aspx

于 2011-11-14T21:06:05.253 回答