33 Concurrency support library [thread]
namespace std {
class hazard_pointer {
public:
hazard_pointer() noexcept;
hazard_pointer(hazard_pointer&&) noexcept;
hazard_pointer& operator=(hazard_pointer&&) noexcept;
~hazard_pointer();
[[nodiscard]] bool empty() const noexcept;
template<class T> T* protect(const atomic<T*>& src) noexcept;
template<class T> bool try_protect(T*& ptr, const atomic<T*>& src) noexcept;
template<class T> void reset_protection(const T* ptr) noexcept;
void reset_protection(nullptr_t = nullptr) noexcept;
void swap(hazard_pointer&) noexcept;
};
}
An object of type
hazard_pointer is either empty or
owns a hazard pointer
. Each hazard pointer is owned by
exactly one object of type
hazard_pointer. [
Note 1:
An empty
hazard_pointer object is different from
a
hazard_pointer object
that owns an unassociated hazard pointer
. An empty
hazard_pointer object does not own any hazard pointers
. —
end note]