diff --git a/benchmarks/multi_writer_test.go b/benchmarks/multi_writer_test.go
new file mode 100644
index 0000000..46355a8
--- /dev/null
+++ b/benchmarks/multi_writer_test.go
@@ -0,0 +1,68 @@
+package benchmarks
+
+import (
+	"math"
+	"runtime"
+	"testing"
+
+	"github.com/smartystreets/go-disruptor"
+)
+
+const multiWriterRingBufferSize = 1024 * 16
+const multiWriterRingBufferMask = multiWriterRingBufferSize - 1
+
+func BenchmarkDisruptorSharedWriterClaimSingle(b *testing.B) {
+	benchmarkMultiWriter(b, 1)
+}
+func BenchmarkDisruptorSharedWriterClaimMultiple(b *testing.B) {
+	benchmarkMultiWriter(b, 32)
+}
+
+func benchmarkMultiWriter(b *testing.B, maxClaim int64) {
+	written, read := disruptor.NewCursor(), disruptor.NewCursor()
+	shared := disruptor.NewSharedWriterBarrier(written, multiWriterRingBufferSize)
+	reader := disruptor.NewReader(read, written, shared)
+	writer := disruptor.NewSharedWriter(shared, read)
+
+	iterations := int64(b.N)
+	ringBuffer := [multiWriterRingBufferSize]int64{}
+	claim := (int64(math.Log2(float64(iterations))) + 1)
+	if claim >= maxClaim {
+		claim = maxClaim
+	}
+
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	go func() {
+		sequence := int64(0)
+		for sequence < iterations {
+			if lower, upper := writer.Reserve(claim); upper >= 0 {
+				for ; sequence <= upper; sequence++ {
+					ringBuffer[sequence&multiWriterRingBufferMask] = sequence
+				}
+
+				writer.Commit(lower, upper)
+				sequence = upper
+			}
+		}
+	}()
+
+	sequence := int64(0)
+	for sequence < iterations {
+		if _, upper := reader.Receive(); upper >= 0 {
+			for ; sequence <= upper; sequence++ {
+				if sequence != ringBuffer[sequence&multiWriterRingBufferMask] {
+					panic("Out of sequence")
+				}
+			}
+
+			reader.Commit(upper)
+			sequence = upper
+		}
+	}
+}
+
+func init() {
+	runtime.GOMAXPROCS(2)
+}
