我试图使用C++ 11原子的基本对象数组,即下面:
// Atomic array
std::atomic<Object*> *array = new std::atomic<Object*>[10];
// Storing old data
array[0].store(oldObject);
// Store the new data
Object *newObject = new Object();
while(!array[0].compare_exchange_strong(oldObject,newObject));
Run Code Online (Sandbox Code Playgroud)
我的问题是,只有当另一个线程在相同的索引处修改数组时,CAS操作才能失败吗?或者,如果任何线程试图修改阵列中的任何位置,CAS操作是否会失败?后者是我在测试中似乎得到的行为.如果是这样,是否有更好的方法来声明一个数组,以便修改数组中不同的单个单元格不会相互影响?
谢谢.
如果我有一个存储在变量中的内存位置的地址,即uint64_t64位系统上的8字节指针,我可以使用存储在其中的值uint64_t来创建一个指向它所拥有的内存位置的新指针吗?
struct Node { .. };
Node* node = new Node(5);
uint64_t addr = (uint64_t)static_cast<void*>(&node); // 8 byte pointer
Run Code Online (Sandbox Code Playgroud)
例如,节点的地址是0x7fff76bb4880,addr存储140735185373312(dec表示),我想要一个新的指针Node* new_ptr = (Node*)0x7fff76bb4880.
我意识到这将是特定于平台的.