标签: concurrent-vector

是否有无锁矢量实现?

谷歌为"锁定免费载体"的第一个结果是Damian Dechev,Peter Pirkelbauer和Bjarne Stroustrup描述理论无锁向量的研究论文.这个或任何其他无锁向量是否已实现?

c++ concurrency vector lock-free concurrent-vector

11
推荐指数
1
解决办法
4379
查看次数

Is it concurrency-safe to call concurrency::concurrent_vector::push_back while iterating over that concurrent_vector in other thread?

push_back, begin, end are described as concurrent safe in https://docs.microsoft.com/en-us/cpp/parallel/concrt/reference/concurrent-vector-class?view=vs-2019#push_back

However the below code is asserting. Probably because element is added but not initialized yet.

struct MyData
   {
   explicit MyData()
      {
      memset(arr, 0xA5, sizeof arr);
      }
   std::uint8_t arr[1024];
   };

struct MyVec
   {
   concurrency::concurrent_vector<MyData> v;
   };

auto vector_pushback(MyVec &vec) -> void
   {
   vec.v.push_back(MyData{});
   }

auto vector_loop(MyVec &vec) -> void
   {
   MyData myData;
   for (auto it = vec.v.begin(); it != vec.v.end(); ++it)
      {
      auto res = memcmp(&(it->arr), &(myData.arr), sizeof myData.arr); …
Run Code Online (Sandbox Code Playgroud)

c++ concurrency concurrent-vector

9
推荐指数
1
解决办法
113
查看次数

concurrentdvector用于2d数组

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

我想出了两个解决方案:

  • 用a tbb::concurrent_vector<tbb::concurrent_vector<T> >来存储它.

  • 将所有内容存储在一个tbb::concurrent_vector<T>和访问元素中x * width + y

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

我想知道哪种解决方案对你来说更好.

c++ parallel-processing multithreading tbb concurrent-vector

6
推荐指数
1
解决办法
1928
查看次数

concurrent_vector 无效数据

使用:VC++ 2013

concurrency::concurrent_vector<datanode*> dtnodelst
Run Code Online (Sandbox Code Playgroud)

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

dtnodelst itm = new dtnodelst ();
....
dtnodelst->push_back(itm);
Run Code Online (Sandbox Code Playgroud)

关于可能发生什么的任何想法?

ps 我正在使用 Windows 线程池。有时.. 我可以做 800 万次插入和查找,一切顺利......但有时甚至 200 次插入和查找都会失败。我有点失落。任何帮助将不胜感激!

感谢和最好的问候

实际代码作为参考

ps 我是否遗漏了某些东西,或者使用正确的格式对过去的代码感到痛苦?我记得它之前是自动对齐的... -_-

struct datanode {       
     volatile int nodeval;
     T val;
};
concurrency::concurrent_vector<datanode*> lst
inline T find(UINT32 key)
{
    for (int i = 0; i < lst->size(); i++)
    {
       datanode* nd = lst->at(i);
       //nd is invalid sometimes
       if (nd)  
       if (nd->nodeval == key)
       {
         return (nd->val);
       }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c++ concurrency multithreading visual-c++ concurrent-vector

3
推荐指数
1
解决办法
237
查看次数