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

struct Payload { int value = 0; int check = 0; };
int main() {
    Payload payload;
    std::atomic<bool> ready{false};
    std::thread reader([&] {
        while (!ready.load(std::memory_order_acquire)) std::this_thread::yield();
        assert(payload.value == 42);
        assert(payload.check == 84);
    });
    std::thread writer([&] {
        payload.value = 42;
        payload.check = 84;
        ready.store(true, std::memory_order_release);
    });
    writer.join();
    reader.join();
    std::cout << "release-acquire ok\n";
}
