Commit 852cd96d authored by Maged Michael's avatar Maged Michael Committed by Facebook GitHub Bot

hazard pointers: Support class and function names consistent with WG21 P1121

Summary:
Support class and function names consistent with [WG21 P1121](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1121r3.pdf)

hazard_pointer = hazptr_holder
hazard_pointer_obj_base = hazptr_obj_base
hazard_pointer_domain = hazptr_domain
hazard_pointer_default_domain = default_hazptr_domain
hazard_pointer_clean_up = hazptr_cleanup

Reviewed By: yfeldblum

Differential Revision: D29252308

fbshipit-source-id: f5bbf1af87bad4c0d6a54f052b9379c042a724e8
parent fa9ccf03
...@@ -78,6 +78,14 @@ template < ...@@ -78,6 +78,14 @@ template <
typename D = std::default_delete<T>> typename D = std::default_delete<T>>
class hazptr_obj_base; class hazptr_obj_base;
/** hazard_pointer_obj_base
class template name consistent with standard proposal */
template <
typename T,
template <typename> class Atom = std::atomic,
typename D = std::default_delete<T>>
using hazard_pointer_obj_base = hazptr_obj_base<T, Atom, D>;
/// ///
/// Classes related to link counted objects and automatic retirement. /// Classes related to link counted objects and automatic retirement.
/// Defined in HazptrLinked.h /// Defined in HazptrLinked.h
...@@ -132,10 +140,20 @@ hazptr_priv<Atom>& hazptr_priv_tls(); ...@@ -132,10 +140,20 @@ hazptr_priv<Atom>& hazptr_priv_tls();
template <template <typename> class Atom = std::atomic> template <template <typename> class Atom = std::atomic>
class hazptr_domain; class hazptr_domain;
/** hazard_pointer_domain
class name consistent with standard proposal */
template <template <typename> class Atom = std::atomic>
using hazard_pointer_domain = hazptr_domain<Atom>;
/** default_hazptr_domain */ /** default_hazptr_domain */
template <template <typename> class Atom = std::atomic> template <template <typename> class Atom = std::atomic>
hazptr_domain<Atom>& default_hazptr_domain(); hazptr_domain<Atom>& default_hazptr_domain();
/** hazard_pointer_default_domain
function name consistent with standard proposal */
template <template <typename> class Atom = std::atomic>
hazard_pointer_domain<Atom>& hazard_pointer_default_domain();
/** hazptr_domain_push_list */ /** hazptr_domain_push_list */
template <template <typename> class Atom = std::atomic> template <template <typename> class Atom = std::atomic>
void hazptr_domain_push_list( void hazptr_domain_push_list(
...@@ -161,6 +179,13 @@ template <template <typename> class Atom = std::atomic> ...@@ -161,6 +179,13 @@ template <template <typename> class Atom = std::atomic>
void hazptr_cleanup( void hazptr_cleanup(
hazptr_domain<Atom>& domain = default_hazptr_domain<Atom>()) noexcept; hazptr_domain<Atom>& domain = default_hazptr_domain<Atom>()) noexcept;
/** hazard_pointer_clean_up
function name consistent with standard proposal */
template <template <typename> class Atom = std::atomic>
void hazard_pointer_clean_up(
hazard_pointer_domain<Atom>& domain =
hazard_pointer_default_domain<Atom>()) noexcept;
/** Global default domain defined in Hazptr.cpp */ /** Global default domain defined in Hazptr.cpp */
extern hazptr_domain<std::atomic> default_domain; extern hazptr_domain<std::atomic> default_domain;
...@@ -173,6 +198,11 @@ extern hazptr_domain<std::atomic> default_domain; ...@@ -173,6 +198,11 @@ extern hazptr_domain<std::atomic> default_domain;
template <template <typename> class Atom = std::atomic> template <template <typename> class Atom = std::atomic>
class hazptr_holder; class hazptr_holder;
/** hazard_pointer
class name consistent with standard proposal */
template <template <typename> class Atom = std::atomic>
using hazard_pointer = hazptr_holder<Atom>;
/** Free function make_hazard_pointer constructs nonempty holder */ /** Free function make_hazard_pointer constructs nonempty holder */
template <template <typename> class Atom = std::atomic> template <template <typename> class Atom = std::atomic>
hazptr_holder<Atom> make_hazard_pointer( hazptr_holder<Atom> make_hazard_pointer(
......
...@@ -784,6 +784,12 @@ FOLLY_ALWAYS_INLINE hazptr_domain<Atom>& default_hazptr_domain() { ...@@ -784,6 +784,12 @@ FOLLY_ALWAYS_INLINE hazptr_domain<Atom>& default_hazptr_domain() {
return hazptr_default_domain_helper<Atom>::get(); return hazptr_default_domain_helper<Atom>::get();
} }
template <template <typename> class Atom>
FOLLY_ALWAYS_INLINE hazard_pointer_domain<Atom>&
hazard_pointer_default_domain() {
return default_hazptr_domain<Atom>();
}
/** hazptr_domain_push_retired: push a list of retired objects into a domain */ /** hazptr_domain_push_retired: push a list of retired objects into a domain */
template <template <typename> class Atom> template <template <typename> class Atom>
void hazptr_domain_push_retired( void hazptr_domain_push_retired(
...@@ -812,4 +818,9 @@ void hazptr_cleanup(hazptr_domain<Atom>& domain) noexcept { ...@@ -812,4 +818,9 @@ void hazptr_cleanup(hazptr_domain<Atom>& domain) noexcept {
domain.cleanup(); domain.cleanup();
} }
template <template <typename> class Atom>
void hazard_pointer_clean_up(hazard_pointer_domain<Atom>& domain) noexcept {
hazptr_cleanup(domain);
}
} // namespace folly } // namespace folly
...@@ -35,6 +35,10 @@ DEFINE_int32(num_threads, 6, "Number of threads"); ...@@ -35,6 +35,10 @@ DEFINE_int32(num_threads, 6, "Number of threads");
DEFINE_int64(num_ops, 1003, "Number of ops or pairs of ops per rep"); DEFINE_int64(num_ops, 1003, "Number of ops or pairs of ops per rep");
using folly::default_hazptr_domain; using folly::default_hazptr_domain;
using folly::hazard_pointer;
using folly::hazard_pointer_clean_up;
using folly::hazard_pointer_default_domain;
using folly::hazard_pointer_obj_base;
using folly::hazptr_array; using folly::hazptr_array;
using folly::hazptr_cleanup; using folly::hazptr_cleanup;
using folly::hazptr_domain; using folly::hazptr_domain;
...@@ -1226,6 +1230,13 @@ TEST(HazptrTest, reclamation_without_calling_cleanup) { ...@@ -1226,6 +1230,13 @@ TEST(HazptrTest, reclamation_without_calling_cleanup) {
ASSERT_GT(c_.dtors(), 0); ASSERT_GT(c_.dtors(), 0);
} }
TEST(HazptrTest, standard_names) {
struct Foo : hazard_pointer_obj_base<Foo> {};
DCHECK_EQ(&hazard_pointer_default_domain<>(), &default_hazptr_domain<>());
hazard_pointer<> h = make_hazard_pointer();
hazard_pointer_clean_up<>();
}
// Benchmark drivers // Benchmark drivers
template <typename InitFunc, typename Func, typename EndFunc> template <typename InitFunc, typename Func, typename EndFunc>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment