diff --git a/src/common/adaptive_mutex.h b/src/common/adaptive_mutex.h
new file mode 100644
index 00000000000..f174f599619
--- /dev/null
+++ b/src/common/adaptive_mutex.h
@@ -0,0 +1,27 @@
+// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#ifdef __linux__
+#include <pthread.h>
+#endif
+
+namespace Common {
+
+#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+class AdaptiveMutex {
+public:
+    void lock() {
+        pthread_mutex_lock(&mutex);
+    }
+    void unlock() {
+        pthread_mutex_unlock(&mutex);
+    }
+
+private:
+    pthread_mutex_t mutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
+};
+#endif // PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+
+} // namespace Common
diff --git a/src/video_core/buffer_cache/word_manager.h b/src/video_core/buffer_cache/word_manager.h
index 7ad33d7a64d..5ad724f9617 100644
--- a/src/video_core/buffer_cache/word_manager.h
+++ b/src/video_core/buffer_cache/word_manager.h
@@ -8,6 +8,9 @@
 #include <span>
 #include <utility>
 
+#ifdef __linux__
+#include "common/adaptive_mutex.h"
+#endif
 #include "common/spin_lock.h"
 #include "common/types.h"
 #include "video_core/page_manager.h"
@@ -272,7 +275,11 @@ class RegionManager {
         }
     }
 
+#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+    Common::AdaptiveMutex lock;
+#else
     Common::SpinLock lock;
+#endif
     PageManager* tracker;
     VAddr cpu_addr = 0;
     WordsArray cpu;
diff --git a/src/video_core/page_manager.h b/src/video_core/page_manager.h
index f44307f9244..f6bae9641f6 100644
--- a/src/video_core/page_manager.h
+++ b/src/video_core/page_manager.h
@@ -5,6 +5,9 @@
 
 #include <memory>
 #include <boost/icl/interval_map.hpp>
+#ifdef __linux__
+#include "common/adaptive_mutex.h"
+#endif
 #include "common/spin_lock.h"
 #include "common/types.h"
 
@@ -36,7 +39,11 @@ class PageManager {
     std::unique_ptr<Impl> impl;
     Vulkan::Rasterizer* rasterizer;
     boost::icl::interval_map<VAddr, s32> cached_pages;
+#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+    Common::AdaptiveMutex lock;
+#else
     Common::SpinLock lock;
+#endif
 };
 
 } // namespace VideoCore