diff --git a/src/ring_buffer/mod.rs b/src/ring_buffer/mod.rs
index 52bbb04a463c968c4a5645442de19e74cd911333..0ae68a7c909c67b0f5f044e8336d7a1da33196f9 100644
--- a/src/ring_buffer/mod.rs
+++ b/src/ring_buffer/mod.rs
@@ -29,6 +29,10 @@ impl AtomicUsize {
         unsafe { &mut *self.v.get() }
     }
 
+    pub fn load_acquire(&self) -> usize {
+        unsafe { intrinsics::atomic_load_acq(self.v.get()) }
+    }
+
     pub fn load_relaxed(&self) -> usize {
         unsafe { intrinsics::atomic_load_relaxed(self.v.get()) }
     }
diff --git a/src/ring_buffer/spsc.rs b/src/ring_buffer/spsc.rs
index 488c07a87a91a8d34f90a0bf0f55536c4dc2dd5d..082aab71441c92796e2a9ee0c1c4a0e1beb5aadb 100644
--- a/src/ring_buffer/spsc.rs
+++ b/src/ring_buffer/spsc.rs
@@ -45,7 +45,7 @@ where
         let n = rb.capacity() + 1;
         let buffer: &[T] = unsafe { rb.buffer.as_ref() };
 
-        let tail = rb.tail.load_relaxed();
+        let tail = rb.tail.load_acquire();
         let head = rb.head.load_relaxed();
         if head != tail {
             let item = unsafe { ptr::read(buffer.get_unchecked(head)) };