diff options
Diffstat (limited to 'tests/stm.go')
-rw-r--r-- | tests/stm.go | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/tests/stm.go b/tests/stm.go index ab05d5c..49fcd25 100644 --- a/tests/stm.go +++ b/tests/stm.go @@ -226,78 +226,6 @@ func BenchmarkPingPong(b *testing.B) { parallelPingPongs(b, 1) } -func Example() { - // create a shared variable - n := NewVar(3) - - // read a variable - var v int - Atomically(VoidOperation(func(tx *Tx) { - v = n.Get(tx) - })) - // or: - v = Deref(n) - _ = v - - // write to a variable - Atomically(VoidOperation(func(tx *Tx) { - n.Set(tx, 12) - })) - // or: - AtomicSet(n, 12) - - // update a variable - Atomically(VoidOperation(func(tx *Tx) { - cur := n.Get(tx) - n.Set(tx, cur-1) - })) - - // block until a condition is met - Atomically(VoidOperation(func(tx *Tx) { - cur := n.Get(tx) - if cur != 0 { - tx.Retry() - } - n.Set(tx, 10) - })) - // or: - Atomically(VoidOperation(func(tx *Tx) { - cur := n.Get(tx) - tx.Assert(cur == 0) - n.Set(tx, 10) - })) - - // select among multiple (potentially blocking) transactions - Atomically(Select( - // this function blocks forever, so it will be skipped - VoidOperation(func(tx *Tx) { tx.Retry() }), - - // this function will always succeed without blocking - VoidOperation(func(tx *Tx) { n.Set(tx, 10) }), - - // this function will never run, because the previous - // function succeeded - VoidOperation(func(tx *Tx) { n.Set(tx, 11) }), - )) - - // since Select is a normal transaction, if the entire select retries - // (blocks), it will be retried as a whole: - x := 0 - Atomically(Select( - // this function will run twice, and succeed the second time - VoidOperation(func(tx *Tx) { tx.Assert(x == 1) }), - - // this function will run once - VoidOperation(func(tx *Tx) { - x = 1 - tx.Retry() - }), - )) - // But wait! Transactions are only retried when one of the Vars they read is - // updated. Since x isn't a stm Var, this code will actually block forever -- - // but you get the idea. -} - const maxTokens = 25 func BenchmarkThunderingHerdCondVar(b *testing.B) { |