Starting C++20, std::atomic has wait() and notify_one()/notify_all() operations. But I didn't get exactly how they are supposed to work. cppreference says:
Performs atomic waiting operations. Behaves as if it repeatedly performs the following steps:
- Compare the value representation of this->load(order) with that of old.
- If those are equal, then blocks until
*thisis notified by notify_one() or notify_all(), or the thread is unblocked spuriously.- Otherwise, returns.
These functions are guaranteed to return only if value has changed, even if underlying implementation unblocks spuriously.
I don't exactly get how these 2 parts are related to each other. Does it mean that if the value if not changed, then the function does not return even if I use notify_one()/notify_all() method? meaning that the operation is somehow equal to following pseudocode?
while (*this == val) {
// block thread
}