1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. 2 // This source code is licensed under both the GPLv2 (found in the 3 // COPYING file in the root directory) and Apache 2.0 License 4 // (found in the LICENSE.Apache file in the root directory). 5 6 #pragma once 7 8 #include <folly/synchronization/DistributedMutex.h> 9 #include <folly/synchronization/detail/ProxyLockable.h> 10 11 /** 12 * Specializations for DistributedMutex allow us to use it like a normal 13 * mutex. Even though it has a non-usual interface 14 */ 15 namespace std { 16 template <template <typename> class Atom, bool TimePublishing> 17 class unique_lock< 18 ::folly::detail::distributed_mutex::DistributedMutex<Atom, TimePublishing>> 19 : public ::folly::detail::ProxyLockableUniqueLock< 20 ::folly::detail::distributed_mutex:: 21 DistributedMutex<Atom, TimePublishing>> { 22 public: 23 using ::folly::detail::ProxyLockableUniqueLock< 24 ::folly::detail::distributed_mutex:: 25 DistributedMutex<Atom, TimePublishing>>::ProxyLockableUniqueLock; 26 }; 27 28 template <template <typename> class Atom, bool TimePublishing> 29 class lock_guard< 30 ::folly::detail::distributed_mutex::DistributedMutex<Atom, TimePublishing>> 31 : public ::folly::detail::ProxyLockableLockGuard< 32 ::folly::detail::distributed_mutex:: 33 DistributedMutex<Atom, TimePublishing>> { 34 public: 35 using ::folly::detail::ProxyLockableLockGuard< 36 ::folly::detail::distributed_mutex:: 37 DistributedMutex<Atom, TimePublishing>>::ProxyLockableLockGuard; 38 }; 39 } // namespace std 40