问题标签 [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.
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.
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()
c++ - 二维数组的 concurrent_vector
我目前正在尝试使用tbb::concurrent_vector<T>
. 这个二维数组将被许多不同的线程访问,这就是为什么我希望它能够最有效地处理并行访问。
我想出了2个解决方案:
使用 a
tbb::concurrent_vector<tbb::concurrent_vector<T> >
来存储它。将所有内容存储在 a 中
tbb::concurrent_vector<T>
并使用 w/ 访问元素x * width + y
我偏爱第二个,因为我不想锁定一整行来访问一个元素(因为我假设要访问元素array[x][y]
,tbb 实现将锁定第x
th 行然后第y
th 元素)。
我想知道哪种解决方案对您来说更好。
concurrency - microsoft PPL 库:concurrent_vector push_back 数据只有一次
我有一个 Concurrency::concurrent_vector 并且只想在新元素不存在的情况下才推送_back线程安全(这就是我必须先执行搜索的原因)。我怎样才能做到这一点?我需要一个并发集合,它在迭代器访问(写入,读取相同元素)时是线程安全的,并且还允许我上面写的内容。
问题细化:如果主要是同时搜索,最好使用什么容器需要(同一个迭代器的并发更新)
从 VS2010 中已经提供的内容中,我看到了 concurrent_vector,但更新相同的元素并不安全,而且似乎我需要一个额外的锁以防找不到元素,因此我需要添加一个元素。你怎么看 ?有什么东西可以用来消除外部锁(整个容器锁)吗?
c++ - 是否有无锁向量实现?
Google 关于“无锁矢量”的第一个结果是由 Damian Dechev、Peter Pirkelbauer 和 Bjarne Stroustrup 合着的一篇研究论文,描述了理论上的无锁矢量。是否已经实现了这个或任何其他无锁向量?
vector - tbb - concurrent_vector 地址到内存?
我正在尝试以concurrent_vector
类似于std::vector
.
所以 anstd::vector
可以像这样访问:&stdVector[0]
.
但是 a 的等效项concurrent_vector
不起作用:&tbbVector[0]
.
我想这可能与内存如何在内部存储以实现并发有关,但是有没有办法做到这一点?
c++ - concurrent_vector 无效数据
使用:VC++ 2013
有时当我这样做时dtnodelst->at(i)
....我得到一个无效的地址(0XCDCD.. ofc),这不应该是因为在我推回之后,我从不删除或删除任何项目(即使我删除它应该已返回已删除的旧地址...但我从未删除过,所以情况并非如此)
关于可能发生的事情有什么想法吗?
ps 我正在使用 Windows 线程池。有时..我可以进行 800 万次插入和查找,一切顺利....但有时即使 200 次插入和查找也会失败。我有点迷路了。任何帮助将不胜感激!
谢谢和最好的问候
实际代码仅供参考
ps 我是否遗漏了某些内容,或者过去的代码格式是否正确?我记得它之前是自动对齐的...... -_-
c++ - 连接 tbb concurrent_vectors?
我有多个需要组合的大型 Intel TBB concurrent_vector。它们是如此之大,以至于无法分配足够大小的新 concurrent_vector。
...所以下面的伪代码不起作用
我想做的是将第一组向量转移或交换到组合向量中,以便 [A]、[B]...[X] 变为 [AB...X]。我知道 tbb 支持单个向量的 swap(),但我看不到如何交换或附加多个向量。谁能指出我正确的方向?提前致谢!!
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 将拥有大部分(如果不是全部)副本已经推送到向量上。
c++ - 在其他线程中迭代该 concurrent_vector 时调用 concurrency::concurrent_vector::push_back 是否并发安全?
push_back,begin,end在https://docs.microsoft.com/en-us/cpp/parallel/concrt/reference/concurrent-vector-class?view=vs-2019#push_back中被描述为并发安全
但是下面的代码正在断言。可能是因为添加了元素但尚未初始化。