10

次のプロパティを適用するのはかなり難しいように見えるため、非アトミック オブジェクトに対してstd::atomic_ref効率的に (オブジェクトごとに 1 つ) 実装する方法を考えています。std::mutex

atomic_ref を介してオブジェクトに適用されるアトミック操作は、同じオブジェクトを参照する他のすべての atom_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

4

2 に答える 2

6

実装では、オブジェクトのアドレスに基づくハッシュを使用して、操作の実行中に取得するロックのセットを決定できます。

于 2019-10-11T17:58:26.690 に答える