diff --git a/src/libraries/System.Threading/tests/System.Threading.Tests.csproj b/src/libraries/System.Threading/tests/System.Threading.Tests.csproj
index 72dce9430be633..cb21b19ae3a8c9 100644
--- a/src/libraries/System.Threading/tests/System.Threading.Tests.csproj
+++ b/src/libraries/System.Threading/tests/System.Threading.Tests.csproj
@@ -34,6 +34,7 @@
+
diff --git a/src/libraries/System.Threading/tests/VolatileTests.cs b/src/libraries/System.Threading/tests/VolatileTests.cs
new file mode 100644
index 00000000000000..2646e3edfeb931
--- /dev/null
+++ b/src/libraries/System.Threading/tests/VolatileTests.cs
@@ -0,0 +1,64 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Reflection;
+using Xunit;
+
+namespace System.Threading.Tests
+{
+ public class VolatileTests
+ {
+ [Fact]
+ public void Barriers_DoNotThrow()
+ {
+ Volatile.ReadBarrier();
+ Volatile.WriteBarrier();
+ }
+
+ [Fact]
+ public void BarriersViaReflection()
+ {
+ MethodInfo readBarrierMethod = typeof(Volatile).GetMethod(nameof(Volatile.ReadBarrier), BindingFlags.Public | BindingFlags.Static);
+ MethodInfo writeBarrierMethod = typeof(Volatile).GetMethod(nameof(Volatile.WriteBarrier), BindingFlags.Public | BindingFlags.Static);
+ Assert.NotNull(readBarrierMethod);
+ Assert.NotNull(writeBarrierMethod);
+ readBarrierMethod.Invoke(null, null);
+ writeBarrierMethod.Invoke(null, null);
+ }
+
+ [Fact]
+ public void BarriersAndVolatileOperations()
+ {
+ int value1 = 0;
+ int value2 = 0;
+ long value3 = 0;
+
+ Volatile.ReadBarrier();
+ Volatile.WriteBarrier();
+
+ Volatile.Write(ref value1, 42);
+ Volatile.WriteBarrier();
+ Assert.Equal(42, value1);
+
+ Volatile.ReadBarrier();
+ int result1 = Volatile.Read(ref value1);
+ Assert.Equal(42, result1);
+
+ Volatile.ReadBarrier();
+ Volatile.ReadBarrier();
+ Volatile.WriteBarrier();
+ Volatile.WriteBarrier();
+
+ Volatile.Write(ref value2, 100);
+ Volatile.WriteBarrier();
+ Volatile.ReadBarrier();
+ int result2 = Volatile.Read(ref value2);
+ Assert.Equal(100, result2);
+
+ Volatile.Write(ref value3, 123456789L);
+ Volatile.ReadBarrier();
+ long result3 = Volatile.Read(ref value3);
+ Assert.Equal(123456789L, result3);
+ }
+ }
+}