-
Notifications
You must be signed in to change notification settings - Fork 362
Open
Description
Here's a test program that reproduces this issue
#include <omp.h>
#include <vector>
#include <map>
#include <random>
#include <iostream>
#include <cds/init.h>
#include <cds/urcu/general_buffered.h>
#include <cds/container/bronson_avltree_map_rcu.h>
using namespace cds::container;
typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
typedef std::pair<int, int> intp_t;
static std::vector<intp_t> ref_vals;
static std::map<int, int> sorted_vals;
static const int N = 1000000;
using namespace cds::container;
typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
void create_reference(int n) {
std::mt19937 rng(112233L);
ref_vals.resize(n);
sorted_vals.clear();
int i = 0;
while (i < n) {
int val = rng();
auto it = sorted_vals.find(val);
if (it != sorted_vals.end())
continue;
auto p = std::make_pair(val, val + 1);
sorted_vals.insert(it, p);
ref_vals[i] = p;
i++;
}
std::cout << "Init complete, max element: " << sorted_vals.rbegin()->first + 1 << std::endl;
}
int main() {
cds::Initialize();
rcu_gpb rcuGPB;
BronsonAVLTreeMap<rcu_gpb, int, int> map;
create_reference(N);
int t = std::thread::hardware_concurrency();
#pragma omp parallel num_threads(t)
{
cds::threading::Manager::attachThread();
#pragma omp for
for (int i = 0; i < N; i++)
map.insert(ref_vals[i].first, ref_vals[i].second);
cds::threading::Manager::detachThread();
}
cds::Terminate();
return 0;
}
Metadata
Metadata
Assignees
Labels
No labels