tbb 并发哈希映射作为结构的成员

tbb concurrent hash map as a member of structure

我想要一个并发哈希映射作为结构的成员。我这样做如下:

typedef concurrent_hash_map<int, int> Acreaders;
struct node{ 
    void *obj;  
    int size; // see if required
    Acreaders acrdr;
};

这样我就可以访问并插入哈希 table 中:

Acreaders::accessor a;
struct node *n;
n = (struct node *)malloc(sizeof(struct node));
(n->acrdr).insert(a, 5); 

虽然程序编译正确,但会导致段错误。

可能是什么问题?谢谢..

ceedee,

anderas 是正确的。 mallocing *n 并没有初始化它,只是为堆上的 node 分配了 space。如果你成功了:

Acreaders::accessor a;
node nn;               // this constructs nn
node *n(&nn);          // point n to nn

(n->acrdr).insert(a, 5);

如果你想动态分配node具体使用malloc,你可以像这样初始化它:

node *n;
n = new(malloc(sizeof(node))) node();  // placement new into space

这会在 malloc 的堆上分配 space,并在 space 中构造节点并放置 new。在这种情况下,您必须在释放 space:

之前调用析构函数
n->~node();  // destructor frees any additional structures used by node
free(n);

或者像安德拉斯描述的那样,你可以直接说

n = new node();

完成后,调用

delete n;

对于 C++(TBB 是一个 C++ 库),您应该始终优先使用 new 而不是 malloc。请参阅 In what cases do I use malloc vs new?