我想知道如何为非原子对象std::atomic_ref
有效地实现(std::mutex
每个对象一个),因为以下属性似乎很难强制执行:
通过 atomic_ref 应用于对象的原子操作相对于通过引用同一对象的任何其他 atomic_ref 应用的原子操作是原子的。
特别是以下代码:
void set(std::vector<Big> &objs, size_t i, const Big &val) {
std::atomic_ref RefI{objs[i]};
RefI.store(val);
}
似乎很难实现,因为std::atomic_ref
每次都需要以某种方式选择相同的std::mutex
(除非它是同一类型的所有对象共享的大主锁)。
我错过了什么吗?或者每个对象都负责实现std::atomic_ref
,因此要么是原子的,要么带有std::mutex
?