База Hintsage

Многопоточность

Потоки, синхронизация, атомики и модель памяти C++.

Практика

Вопросы: Многопоточность

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

Программирование C++МногопоточностьРазработчик C++ многопоточных систем

Два потока выполняют операции над двумя атомиками. Гарантирует ли memory_order_seq_cst, что утверждение не сработает?

#include <atomic>
#include <cassert>
#include <thread>

std::atomic<int> x{0}, y{0};
int r1 = 0, r2 = 0;

int main() {
    std::thread t1([] {
        x.store(1, std::memory_order_seq_cst);
        r1 = y.load(std::memory_order_seq_cst);
    });
    std::thread t2([] {
        y.store(1, std::memory_order_seq_cst);
        r2 = x.load(std::memory_order_seq_cst);
    });
    t1.join(); t2.join();
    assert(!(r1 == 0 && r2 == 0));
}
Программирование C++МногопоточностьC++ разработчик системного программного обеспечения

Показано 4150 из 50