База Hintsage

Программирование C++

Язык C++ и его модель выполнения.

Темы раздела

Выберите подраздел

Практика

Вопросы: Программирование C++

В следующем фрагменте уведомление выполняется до запуска ожидающего потока. Объясните, почему ожидание не теряется и при каком условии wait возвращается.

#include <atomic>
#include <thread>

std::atomic<bool> ready{false};

void worker() {
    ready.wait(false);
}

int main() {
    ready.store(true, std::memory_order_release);
    ready.notify_one();
    std::thread t(worker);
    t.join();
}
Программирование C++МногопоточностьРазработчик системного 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++ разработчик системного программного обеспечения

Показано 81100 из 300