From 39c002d52a8085fdde5cb08d768d78e9fe03fee0 Mon Sep 17 00:00:00 2001 From: greg Date: Sat, 25 May 2019 16:01:53 -0400 Subject: [PATCH] std::shared_mutex support #11 --- parallel_hashmap/phmap_base.h | 25 +++++++++++++++++++++++++ parallel_hashmap/phmap_config.h | 4 ++++ 2 files changed, 29 insertions(+) diff --git a/parallel_hashmap/phmap_base.h b/parallel_hashmap/phmap_base.h index 96b16e6..bbc6712 100644 --- a/parallel_hashmap/phmap_base.h +++ b/parallel_hashmap/phmap_base.h @@ -50,6 +50,10 @@ #include "phmap_config.h" +#ifdef PHMAP_HAVE_SHARED_MUTEX + #include // after "phmap_config.h" +#endif + namespace phmap { template using Allocator = typename std::allocator; @@ -4898,6 +4902,27 @@ public: }; #endif +// -------------------------------------------------------------------------- +// std::shared_mutex support (read and write lock support) +// -------------------------------------------------------------------------- +#ifdef PHMAP_HAVE_SHARED_MUTEX + + // --------------------------------------------------------------------------- + template <> + class LockableImpl : public std::shared_mutex + { + public: + using mutex_type = std::shared_mutex; + using Base = LockableBaseImpl; + using SharedLock = std::shared_lock; + using UpgradeLock = std::unique_lock; // assume can't upgrade + using UniqueLock = std::unique_lock; + using SharedLocks = typename Base::ReadLocks; + using UniqueLocks = typename Base::WriteLocks; + using UpgradeToUnique = typename Base::DoNothing; // we already have unique ownership + }; +#endif + #endif // PHMAP_HAS_BOOST_THREAD_MUTEXES diff --git a/parallel_hashmap/phmap_config.h b/parallel_hashmap/phmap_config.h index a1705ad..f679f1a 100644 --- a/parallel_hashmap/phmap_config.h +++ b/parallel_hashmap/phmap_config.h @@ -311,6 +311,10 @@ #define PHMAP_HAVE_STD_STRING_VIEW 1 #endif +#if (defined(_MSVC_LANG) && _MSVC_LANG >= 201402) || __cplusplus >= 201402 + #define PHMAP_HAVE_SHARED_MUTEX 1 +#endif + #ifndef PHMAP_HAVE_STD_STRING_VIEW #define PHMAP_HAVE_STD_STRING_VIEW 0 #endif