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);
}
实际上你是对的。我对这种用法持怀疑态度。但正如你所说,它编译得很好,运行得很好。实际上你是对的。我对这种用法持怀疑态度。但正如你所说,它编译得很好,运行得很好。实际上你是对的。我对这种用法持怀疑态度。但正如你所说,它编译得很好,运行得很好。实际上你是对的。我对这种用法持怀疑态度。但正如你所说,它编译并运行良好。