/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <folly/synchronization/Hazptr-fwd.h> #if FOLLY_HAZPTR_THR_LOCAL #include <atomic> #include <glog/logging.h> #include <folly/SingletonThreadLocal.h> #include <folly/synchronization/HazptrObj.h> #include <folly/synchronization/HazptrRec.h> /** * Thread local classes and singletons */ namespace folly { /** * hazptr_tc_entry * * Thread cache entry. */ template <template <typename> class Atom> class hazptr_tc_entry { … }; // hazptr_tc_entry /** * hazptr_tc: * * Thread cache of hazptr_rec-s that belong to the default domain. */ template <template <typename> class Atom> class hazptr_tc { … }; // hazptr_tc struct hazptr_tc_tls_tag { … }; /** hazptr_tc_tls */ template <template <typename> class Atom> FOLLY_ALWAYS_INLINE hazptr_tc<Atom>& hazptr_tc_tls() { … } /** hazptr_tc_evict -- Used only for benchmarking */ template <template <typename> class Atom> void hazptr_tc_evict() { … } } // namespace folly #endif // FOLLY_HAZPTR_THR_LOCAL