lundi 22 juin 2020

Do std::promise::set_value() and std::future::wait() provide a memory fence?

If I do the following:

std::promise<void> p;
int a = 1;

std::thread t([&] {
  a = 2;
  p.set_value();
});

p.get_future().wait();

// Is the value of `a` guaranteed to be 2 here?

cppreference has this to say about set_value(), but I am not sure what it means:

Calls to this function do not introduce data races with calls to get_future (but they need not synchronize with each other).

Do set_value() and wait() provide an acquire/release synchronization (or some other form)?

Aucun commentaire:

Enregistrer un commentaire