#include <thread>
#include <print>

struct data
{
    int foo;
    int bar;
};
data* shared_data = nullptr;

int main()
{
    // **produce**
    data* local_data = new data;                       // <-- write #1
    local_data->foo = 42;                              // <-- write #2
    local_data->bar = 666;                             // <-- write #3

    // **publish: shared_data valid from here on**
    shared_data = local_data;                          // <-- write #4

    // **consume**
    std::println("foo {}, bar {}", shared_data->foo, shared_data->bar);

    return 0;
}
