diff --git a/library/std/src/sync/condvar.rs b/library/std/src/sync/condvar.rs
index 76a1b4a2a86cd..dcdfb427edc45 100644
--- a/library/std/src/sync/condvar.rs
+++ b/library/std/src/sync/condvar.rs
@@ -3,7 +3,7 @@ mod tests;
 
 use crate::fmt;
 use crate::sync::{mutex, poison, LockResult, MutexGuard, PoisonError};
-use crate::sys::locks as sys;
+use crate::sys_common::locks as sys;
 use crate::time::{Duration, Instant};
 
 /// A type indicating whether a timed wait on a condition variable returned
diff --git a/library/std/src/sync/mutex.rs b/library/std/src/sync/mutex.rs
index 065045f442069..cb95a35b3bbc2 100644
--- a/library/std/src/sync/mutex.rs
+++ b/library/std/src/sync/mutex.rs
@@ -5,7 +5,7 @@ use crate::cell::UnsafeCell;
 use crate::fmt;
 use crate::ops::{Deref, DerefMut};
 use crate::sync::{poison, LockResult, TryLockError, TryLockResult};
-use crate::sys::locks as sys;
+use crate::sys_common::locks as sys;
 
 /// A mutual exclusion primitive useful for protecting shared data
 ///
diff --git a/library/std/src/sync/rwlock.rs b/library/std/src/sync/rwlock.rs
index 7c409cb3e9776..e6a94f65126f4 100644
--- a/library/std/src/sync/rwlock.rs
+++ b/library/std/src/sync/rwlock.rs
@@ -6,7 +6,7 @@ use crate::fmt;
 use crate::ops::{Deref, DerefMut};
 use crate::ptr::NonNull;
 use crate::sync::{poison, LockResult, TryLockError, TryLockResult};
-use crate::sys::locks as sys;
+use crate::sys_common::locks as sys;
 
 /// A reader-writer lock
 ///
diff --git a/library/std/src/sys/hermit/mod.rs b/library/std/src/sys/hermit/mod.rs
index 6811fadb0188c..64fe210913f09 100644
--- a/library/std/src/sys/hermit/mod.rs
+++ b/library/std/src/sys/hermit/mod.rs
@@ -46,16 +46,6 @@ pub mod thread_local_dtor;
 pub mod thread_local_key;
 pub mod time;
 
-#[path = "../unix/locks"]
-pub mod locks {
-    mod futex_condvar;
-    mod futex_mutex;
-    mod futex_rwlock;
-    pub(crate) use futex_condvar::Condvar;
-    pub(crate) use futex_mutex::Mutex;
-    pub(crate) use futex_rwlock::RwLock;
-}
-
 use crate::io::ErrorKind;
 
 #[allow(unused_extern_crates)]
diff --git a/library/std/src/sys/unix/locks/mod.rs b/library/std/src/sys/unix/locks/mod.rs
index b2e0e49ad736d..c588efaabb977 100644
--- a/library/std/src/sys/unix/locks/mod.rs
+++ b/library/std/src/sys/unix/locks/mod.rs
@@ -1,25 +1,16 @@
+#![cfg(not(any(
+    target_os = "linux",
+    target_os = "android",
+    all(target_os = "emscripten", target_feature = "atomics"),
+    target_os = "freebsd",
+    target_os = "openbsd",
+    target_os = "dragonfly",
+)))]
+
 cfg_if::cfg_if! {
-    if #[cfg(any(
-        target_os = "linux",
-        target_os = "android",
-        all(target_os = "emscripten", target_feature = "atomics"),
-        target_os = "freebsd",
-        target_os = "openbsd",
-        target_os = "dragonfly",
-    ))] {
-        mod futex_mutex;
-        mod futex_rwlock;
-        mod futex_condvar;
-        pub(crate) use futex_mutex::Mutex;
-        pub(crate) use futex_rwlock::RwLock;
-        pub(crate) use futex_condvar::Condvar;
-    } else if #[cfg(target_os = "fuchsia")] {
+    if #[cfg(target_os = "fuchsia")] {
         mod fuchsia_mutex;
-        mod futex_rwlock;
-        mod futex_condvar;
         pub(crate) use fuchsia_mutex::Mutex;
-        pub(crate) use futex_rwlock::RwLock;
-        pub(crate) use futex_condvar::Condvar;
     } else {
         mod pthread_mutex;
         mod pthread_rwlock;
diff --git a/library/std/src/sys/wasm/mod.rs b/library/std/src/sys/wasm/mod.rs
index d68c3e5f1dfbf..655557cc70517 100644
--- a/library/std/src/sys/wasm/mod.rs
+++ b/library/std/src/sys/wasm/mod.rs
@@ -49,16 +49,6 @@ pub mod time;
 
 cfg_if::cfg_if! {
     if #[cfg(target_feature = "atomics")] {
-        #[path = "../unix/locks"]
-        pub mod locks {
-            #![allow(unsafe_op_in_unsafe_fn)]
-            mod futex_condvar;
-            mod futex_mutex;
-            mod futex_rwlock;
-            pub(crate) use futex_condvar::Condvar;
-            pub(crate) use futex_mutex::Mutex;
-            pub(crate) use futex_rwlock::RwLock;
-        }
         #[path = "atomics/futex.rs"]
         pub mod futex;
         #[path = "atomics/thread.rs"]
diff --git a/library/std/src/sys/unix/locks/futex_condvar.rs b/library/std/src/sys_common/locks/futex_condvar.rs
similarity index 100%
rename from library/std/src/sys/unix/locks/futex_condvar.rs
rename to library/std/src/sys_common/locks/futex_condvar.rs
diff --git a/library/std/src/sys/unix/locks/futex_mutex.rs b/library/std/src/sys_common/locks/futex_mutex.rs
similarity index 100%
rename from library/std/src/sys/unix/locks/futex_mutex.rs
rename to library/std/src/sys_common/locks/futex_mutex.rs
diff --git a/library/std/src/sys/unix/locks/futex_rwlock.rs b/library/std/src/sys_common/locks/futex_rwlock.rs
similarity index 100%
rename from library/std/src/sys/unix/locks/futex_rwlock.rs
rename to library/std/src/sys_common/locks/futex_rwlock.rs
diff --git a/library/std/src/sys_common/locks/mod.rs b/library/std/src/sys_common/locks/mod.rs
new file mode 100644
index 0000000000000..d317b8e0f8781
--- /dev/null
+++ b/library/std/src/sys_common/locks/mod.rs
@@ -0,0 +1,27 @@
+cfg_if::cfg_if! {
+    if #[cfg(any(
+        target_os = "android",
+        target_os = "dragonfly",
+        all(target_os = "emscripten", target_feature = "atomics"),
+        target_os = "freebsd",
+        target_os = "hermit",
+        target_os = "linux",
+        target_os = "openbsd",
+        all(any(target_arch = "wasm32", target_arch = "wasm64"), target_feature = "atomics"),
+    ))] {
+        mod futex_mutex;
+        mod futex_rwlock;
+        mod futex_condvar;
+        pub(crate) use futex_mutex::Mutex;
+        pub(crate) use futex_rwlock::RwLock;
+        pub(crate) use futex_condvar::Condvar;
+    } else if #[cfg(target_os = "fuchsia")] {
+        mod futex_rwlock;
+        mod futex_condvar;
+        pub(crate) use crate::sys::locks::Mutex;
+        pub(crate) use futex_rwlock::RwLock;
+        pub(crate) use futex_condvar::Condvar;
+    } else {
+        pub(crate) use crate::sys::locks::{Mutex, RwLock, Condvar};
+    }
+}
diff --git a/library/std/src/sys_common/mod.rs b/library/std/src/sys_common/mod.rs
index 069b13e9d85ea..92d6de67a8bb7 100644
--- a/library/std/src/sys_common/mod.rs
+++ b/library/std/src/sys_common/mod.rs
@@ -24,6 +24,7 @@ pub mod backtrace;
 pub mod fs;
 pub mod io;
 pub mod lazy_box;
+pub mod locks;
 pub mod memchr;
 pub mod once;
 pub mod process;
diff --git a/library/std/src/sys_common/remutex.rs b/library/std/src/sys_common/remutex.rs
index 4c054da64714c..21a7db91e18af 100644
--- a/library/std/src/sys_common/remutex.rs
+++ b/library/std/src/sys_common/remutex.rs
@@ -5,7 +5,7 @@ use crate::cell::UnsafeCell;
 use crate::ops::Deref;
 use crate::panic::{RefUnwindSafe, UnwindSafe};
 use crate::sync::atomic::{AtomicUsize, Ordering::Relaxed};
-use crate::sys::locks as sys;
+use crate::sys_common::locks as sys;
 
 /// A re-entrant mutual exclusion
 ///