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?
我想要一个并发哈希映射作为结构的成员。我这样做如下:
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?