aboutsummaryrefslogtreecommitdiff
path: root/tests/stm.go
diff options
context:
space:
mode:
Diffstat (limited to 'tests/stm.go')
-rw-r--r--tests/stm.go72
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) {