2014-04-25 37 views
0

修改数组元素我有个树节点结构为:原子采用Intel TBB

struct node 
{ 
    unsigned long key;           
    tbb::atomic<struct node*> lChild; 
    tbb::atomic<struct node*> rChild; 
}; 

我将在lChildrChildcompare_and_swap。 我想让左侧和右侧的孩子作为数组元素,并且仍然能够对单个数组元素进行CAS操作。

注:我不打算做一个双CAS

我尝试这样做:

struct node 
{ 
    unsigned long key; 
    tbb::atomic<struct node*> childrenArray[2]; 
}; 

这:

struct node 
{ 
    unsigned long key;           
    tbb::atomic<struct node**> childrenArray; 
}; 

但这里的各个数组元素是不是原子。如何修改此结构,以便我可以执行CAS操作:

node->childrenArray[0].compare_and_swap(newNode,oldNode); 

回答

3

为什么第一种方法对您不适用?除非你打算在整个阵列上执行原子更新,否则这是要走的路。我成功编译了以下代码:

struct node 
{ 
    unsigned long key; 
    tbb::atomic<struct node*> childrenArray[2]; 
}; 

void main() { 
    node n; 
    n.childrenArray[0].compare_and_swap(0,0); 
} 
+0

其实你是对的。我对这种用法持怀疑态度。但正如你所说的那样,它编译并运行良好。 – arunmoezhi

相关问题