C++ 使用“英特尔TBB”以原子方式修改数组元素

C++ 使用“英特尔TBB”以原子方式修改数组元素,c++,atomic,tbb,compare-and-swap,C++,Atomic,Tbb,Compare And Swap,我有一个树节点结构,如下所示: struct node { unsigned long key; tbb::atomic<struct node*> lChild; tbb::atomic<struct node*> rChild; }; 这是: struct node { unsigned long key;

我有一个树节点结构,如下所示:

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

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

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

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

void main() {
    node n;
    n.childrenArray[0].compare_and_swap(0,0);
}
struct节点
{
无符号长密钥;
tbb::原子儿童阵列[2];
};
void main(){
节点n;
n、 childrenArray[0]。比较_和_交换(0,0);
}

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

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

void main() {
    node n;
    n.childrenArray[0].compare_and_swap(0,0);
}
struct节点
{
无符号长密钥;
tbb::原子儿童阵列[2];
};
void main(){
节点n;
n、 childrenArray[0]。比较_和_交换(0,0);
}

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

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

void main() {
    node n;
    n.childrenArray[0].compare_and_swap(0,0);
}
struct节点
{
无符号长密钥;
tbb::原子儿童阵列[2];
};
void main(){
节点n;
n、 childrenArray[0]。比较_和_交换(0,0);
}

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

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

void main() {
    node n;
    n.childrenArray[0].compare_and_swap(0,0);
}
struct节点
{
无符号长密钥;
tbb::原子儿童阵列[2];
};
void main(){
节点n;
n、 childrenArray[0]。比较_和_交换(0,0);
}

实际上你是对的。我对这种用法持怀疑态度。但正如你所说,它编译得很好,运行得很好。实际上你是对的。我对这种用法持怀疑态度。但正如你所说,它编译得很好,运行得很好。实际上你是对的。我对这种用法持怀疑态度。但正如你所说,它编译得很好,运行得很好。实际上你是对的。我对这种用法持怀疑态度。但正如你所说,它编译并运行良好。