这能够以原子方式完成吗?
如果必须使用
gcc原子扩展具有
void load_and_store(int* dst, int* src) {
int data = *src;
*dst = data;
}
如果必须使用
XCHG [addr], EAX
进行原子存储,则必须先将数据加载到EAX
中。然后,加载和存储就不是原子操作了。gcc原子扩展具有
void __atomic_store (type *ptr, type *val, int memmodel)
,看起来能够同时原子地执行加载和存储。
*dst = *src;
有什么不同吗? - Mark B