问题标签 [concurrent-vector]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1582 浏览

sorting - How to sort TBB concurrent_vector or concurrent_queue?

Now I have a solver in that I need to keep a set of self-defined data type objects in a concurrent_vector or queue. It has to be concurrent because the objects come from different threads.With this concurrent container, I hope to sort these objects, eliminate duplicates and send them back when other threads need them.

However, I know TBB offers concurrent_vector and concurrent_queue which can be read and written concurrently from different threads. But how to sort the objects inside a container? Does everyone know how to do that? Thanks.

0 投票
1 回答
1062 浏览

c++ - tbb::concurrent_vector 返回错误的大小

我在TBB 论坛上问过这个问题,但我希望这里的人可能有一些额外的想法。我正在调试我们看到的一个问题,并注意到来自tbb::concurrent_vector.

底线是push_back()调用实际完成后,size()concurrent_vector并没有反映这一点。我已将其范围缩小为与容量相关,因为如果我捕获capacity()and size()size() == capacity() => true这使我相信size()返回的是容量而不是元素的实际数量。

我创建了一个简单的程序来复制这个问题,它最常在向量为空时触发。为简单起见,该程序只是在调用返回size() != 0后立即断言。push_back()我希望有人能告诉我这是预期的行为还是错误。

根据他们的参考手册

push_back() "将值的副本附加到向量的末尾。"

size() 返回“向量中的元素数。结果可能包括已分配但仍在通过并发调用任何增长方法 (5.6.3) 构建的元素。”

基于此,我认为至少size()应该体现一次回报。push_back()push_back()

0 投票
2 回答
2712 浏览

c++ - 二维数组的 concurrent_vector

我目前正在尝试使用tbb::concurrent_vector<T>. 这个二维数组将被许多不同的线程访问,这就是为什么我希望它能够最有效地处理并行访问。

我想出了2个解决方案:

  • 使用 atbb::concurrent_vector<tbb::concurrent_vector<T> >来存储它。

  • 将所有内容存储在 a 中tbb::concurrent_vector<T>并使用 w/ 访问元素x * width + y

我偏爱第二个,因为我不想锁定一整行来访问一个元素(因为我假设要访问元素array[x][y],tbb 实现将锁定第xth 行然后第yth 元素)。

我想知道哪种解决方案对您来说更好。

0 投票
1 回答
294 浏览

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

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

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

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

0 投票
2 回答
5625 浏览

c++ - 是否有无锁向量实现?

Google 关于“无锁矢量”的第一个结果是由 Damian Dechev、Peter Pirkelbauer 和 Bjarne Stroustrup 合着的一篇研究论文,描述了理论上的无锁矢量。是否已经实现了这个或任何其他无锁向量?

0 投票
1 回答
334 浏览

vector - tbb - concurrent_vector 地址到内存?

我正在尝试以concurrent_vector类似于std::vector.

所以 anstd::vector可以像这样访问:&stdVector[0].

但是 a 的等效项concurrent_vector不起作用:&tbbVector[0].

我想这可能与内存如何在内部存储以实现并发有关,但是有没有办法做到这一点?

0 投票
2 回答
250 浏览

c++ - concurrent_vector 无效数据

使用:VC++ 2013

有时当我这样做时dtnodelst->at(i)....我得到一个无效的地址(0XCDCD.. ofc),这不应该是因为在我推回之后,我从不删除或删除任何项目(即使我删除它应该已返回已删除的旧地址...但我从未删除过,所以情况并非如此)

关于可能发生的事情有什么想法吗?

ps 我正在使用 Windows 线程池。有时..我可以进行 800 万次插入和查找,一切顺利....但有时即使 200 次插入和查找也会失败。我有点迷路了。任何帮助将不胜感激!

谢谢和最好的问候

实际代码仅供参考

ps 我是否遗漏了某些内容,或者过去的代码格式是否正确?我记得它之前是自动对齐的...... -_-

0 投票
1 回答
360 浏览

c++ - 连接 tbb concurrent_vectors?

我有多个需要组合的大型 Intel TBB concurrent_vector。它们是如此之大,以至于无法分配足够大小的新 concurrent_vector。

...所以下面的伪代码不起作用

我想做的是将第一组向量转移或交换到组合向量中,以便 [A]、[B]...[X] 变为 [AB...X]。我知道 tbb 支持单个向量的 swap(),但我看不到如何交换或附加多个向量。谁能指出我正确的方向?提前致谢!!

0 投票
1 回答
1355 浏览

c++ - concurrent_vector 与带有互斥锁的矢量,push_back 的线程问题

我有一个正在由多个任务处理的对象。我多次复制这个对象并存储在一个任务的向量中,以检索它自己的副本以在 parallel_for 循环中工作。下面是带有标准向量的代码。

这个想法是我从一个大小为 0 的向量开始,并根据并行启动并需要自己的副本的任务数量来增长它。我使用原子“_poolIndex”来跟踪每次运行的全局索引。

我在向量类的以下代码中得到索引超出范围,即使当调试器中断时 position < size :

所以很明显,检索 size() <= _Pos 的部分已经评估了一些不同的东西......我很困惑,因为我有一个推到向量上的锁。

然后我尝试了 concurrent_vector 并且 push_back 给了我编译问题,这是 Visual Studio 2013 错误:

错误 35 错误 C2059:语法错误:'&' c:\program files (x86)\microsoft visual studio 12.0\vc\include\concurrent_vector.h 1492 1 UnitTests

错误 36 错误 C2143:语法错误:缺少 ';' 在')'之前 c:\program files (x86)\microsoft visual studio 12.0\vc\include\concurrent_vector.h 1492 1 UnitTests

在 concurrent_vector 类中,当我将 _objectPool 从 vector 切换为 concurrent_vector 时,以下代码给出了问题:

如果有人可以就上述两个问题提供指导,那就太好了。

我还试图最小化关键部分以提高效率。这个想法是在启动算法并多次运行之后,_objectPool 将拥有大部分(如果不是全部)副本已经推送到向量上。

0 投票
1 回答
294 浏览

c++ - 在其他线程中迭代该 concurrent_vector 时调用 concurrency::concurrent_vector::push_back 是否并发安全?

push_backbeginend在https://docs.microsoft.com/en-us/cpp/parallel/concrt/reference/concurrent-vector-class?view=vs-2019#push_back中被描述为并发安全

但是下面的代码正在断言。可能是因为添加了元素但尚未初始化。