diff --git a/src/sync/export_test.go b/src/sync/export_test.go
index fa5983a2d1e5d23ccf3abb0091a036b1badf5dbb..6f49b3bd8a8f790536fdc5659113cec7c43f14b3 100644
--- a/src/sync/export_test.go
+++ b/src/sync/export_test.go
@@ -7,3 +7,5 @@ package sync
 // Export for testing.
 var Runtime_Semacquire = runtime_Semacquire
 var Runtime_Semrelease = runtime_Semrelease
+
+const RaceEnabled = raceenabled
diff --git a/src/sync/waitgroup_test.go b/src/sync/waitgroup_test.go
index 06a77798d088d3d11e9a45a23c85dc20b150bdbd..d3329624fc360db8947c7fad1852a7c3556cf92f 100644
--- a/src/sync/waitgroup_test.go
+++ b/src/sync/waitgroup_test.go
@@ -47,6 +47,12 @@ func TestWaitGroup(t *testing.T) {
 	}
 }
 
+func knownRacy(t *testing.T) {
+	if RaceEnabled {
+		t.Skip("skipping known-racy test under the race detector")
+	}
+}
+
 func TestWaitGroupMisuse(t *testing.T) {
 	defer func() {
 		err := recover()
@@ -62,6 +68,7 @@ func TestWaitGroupMisuse(t *testing.T) {
 }
 
 func TestWaitGroupMisuse2(t *testing.T) {
+	knownRacy(t)
 	if runtime.NumCPU() <= 2 {
 		t.Skip("NumCPU<=2, skipping: this test requires parallelism")
 	}
@@ -104,6 +111,7 @@ func TestWaitGroupMisuse2(t *testing.T) {
 }
 
 func TestWaitGroupMisuse3(t *testing.T) {
+	knownRacy(t)
 	if runtime.NumCPU() <= 1 {
 		t.Skip("NumCPU==1, skipping: this test requires parallelism")
 	}