layers: Use std::shared_timed_mutex when building for C++14
diff --git a/layers/vk_layer_utils.h b/layers/vk_layer_utils.h
index be0b07f..98c4089 100644
--- a/layers/vk_layer_utils.h
+++ b/layers/vk_layer_utils.h
@@ -281,9 +281,11 @@
#endif
#elif __cplusplus >= 201703
#define VVL_USE_SHARED_MUTEX 1
+#elif __cplusplus >= 201402
+#define VVL_USE_SHARED_TIMED_MUTEX 1
#endif
-#if defined(VVL_USE_SHARED_MUTEX)
+#if defined(VVL_USE_SHARED_MUTEX) || defined(VVL_USE_SHARED_TIMED_MUTEX)
#include <shared_mutex>
#endif
@@ -291,6 +293,8 @@
private:
#if defined(VVL_USE_SHARED_MUTEX)
typedef std::shared_mutex lock_t;
+#elif defined(VVL_USE_SHARED_TIMED_MUTEX)
+ typedef std::shared_timed_mutex lock_t;
#else
typedef std::mutex lock_t;
#endif
@@ -299,7 +303,7 @@
void lock() { m_lock.lock(); }
bool try_lock() { return m_lock.try_lock(); }
void unlock() { m_lock.unlock(); }
-#if defined(VVL_USE_SHARED_MUTEX)
+#if defined(VVL_USE_SHARED_MUTEX) || defined(VVL_USE_SHARED_TIMED_MUTEX)
void lock_shared() { m_lock.lock_shared(); }
bool try_lock_shared() { return m_lock.try_lock_shared(); }
void unlock_shared() { m_lock.unlock_shared(); }
@@ -312,13 +316,12 @@
lock_t m_lock;
};
-#if defined(VVL_USE_SHARED_MUTEX)
+#if defined(VVL_USE_SHARED_MUTEX) || defined(VVL_USE_SHARED_TIMED_MUTEX)
typedef std::shared_lock<ReadWriteLock> read_lock_guard_t;
-typedef std::unique_lock<ReadWriteLock> write_lock_guard_t;
#else
typedef std::unique_lock<ReadWriteLock> read_lock_guard_t;
-typedef std::unique_lock<ReadWriteLock> write_lock_guard_t;
#endif
+typedef std::unique_lock<ReadWriteLock> write_lock_guard_t;
// Limited concurrent_unordered_map that supports internally-synchronized
// insert/erase/access. Splits locking across N buckets and uses shared_mutex