it‑training
1500

Ложное разделение

cacheconcurrencyperformanceyandextbank

Два потока инкрементируют каждый свой счётчик в цикле:

struct Counters {
    std::atomic<long> a;
    std::atomic<long> b;
};
Counters c;

// поток 1: c.a.fetch_add(1, std::memory_order_relaxed) в цикле
// поток 2: c.b.fetch_add(1, std::memory_order_relaxed) в цикле

Потоки не обращаются к одной и той же переменной, однако программа работает в несколько раз медленнее, чем те же два цикла с независимыми счётчиками в разных объектах.

Выберите все верные утверждения.

Ответ

Можно выбрать несколько вариантов.