diff --git a/README.md b/README.md
index caace74..1057901 100644
--- a/README.md
+++ b/README.md
@@ -35,8 +35,8 @@
 Disruptor: Writer, Await Many | 1.0 ns/op
 Disruptor: SharedWriter, Reserve One | 13.6 ns/op
 Disruptor: SharedWriter, Reserve Many | 2.5 ns/op
-Disruptor: SharedWriter, Reserve One, Contended Write | nn.n ns/op
-Disruptor: SharedWriter, Reserve Many, Contended Write | nn.n ns/op
+Disruptor: SharedWriter, Reserve One, Contended Write | 56.9 ns/op
+Disruptor: SharedWriter, Reserve Many, Contended Write | 3.5 ns/op
 
 When In Doubt, Use Channels
 ----------------------------
diff --git a/benchmark-disruptor/shared_writer_contended_write_test.go b/benchmark-disruptor/shared_writer_contended_write_test.go
new file mode 100644
index 0000000..08b6f70
--- /dev/null
+++ b/benchmark-disruptor/shared_writer_contended_write_test.go
@@ -0,0 +1,93 @@
+package benchmarks
+
+import (
+	"runtime"
+	"testing"
+
+	"github.com/smartystreets/go-disruptor"
+)
+
+func BenchmarkSharedWriterReserveOneContendedWrite(b *testing.B) {
+	runtime.GOMAXPROCS(3)
+	defer runtime.GOMAXPROCS(2)
+
+	ringBuffer := [RingBufferSize]int64{}
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(SampleConsumer{&ringBuffer}).
+		BuildShared()
+	controller.Start()
+	defer controller.Stop()
+	writer := controller.Writer()
+
+	iterations := int64(b.N)
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	go func() {
+		sequence := disruptor.InitialSequenceValue
+		for sequence < iterations {
+			sequence = writer.Reserve(ReserveOne)
+			ringBuffer[sequence&RingBufferMask] = sequence
+			writer.Commit(sequence, sequence)
+		}
+	}()
+
+	sequence := disruptor.InitialSequenceValue
+	for sequence < iterations {
+		sequence = writer.Reserve(ReserveOne)
+		ringBuffer[sequence&RingBufferMask] = sequence
+		writer.Commit(sequence, sequence)
+	}
+
+	b.StopTimer()
+}
+
+func BenchmarkSharedWriterReserveManyContendedWrite(b *testing.B) {
+	runtime.GOMAXPROCS(3)
+	defer runtime.GOMAXPROCS(2)
+
+	ringBuffer := [RingBufferSize]int64{}
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(noopConsumer{}).
+		BuildShared()
+	controller.Start()
+	defer controller.Stop()
+	writer := controller.Writer()
+
+	iterations := int64(b.N)
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	go func() {
+		previous, current := disruptor.InitialSequenceValue, disruptor.InitialSequenceValue
+		for current < iterations {
+			current = writer.Reserve(ReserveMany)
+
+			for i := previous + 1; i <= current; i++ {
+				ringBuffer[i&RingBufferMask] = i
+			}
+
+			writer.Commit(previous+1, current)
+			previous = current
+		}
+	}()
+	previous, current := disruptor.InitialSequenceValue, disruptor.InitialSequenceValue
+	for current < iterations {
+		current = writer.Reserve(ReserveMany)
+
+		for i := previous + 1; i <= current; i++ {
+			ringBuffer[i&RingBufferMask] = i
+		}
+
+		writer.Commit(previous+1, current)
+		previous = current
+	}
+
+	b.StopTimer()
+}
+
+type noopConsumer struct{}
+
+func (this noopConsumer) Consume(lower, upper int64) {}
