Simple but Strange Optimistic Concurrency Example
Mark S. Miller
markm@caplet.com
Fri, 05 Feb 1999 00:14:06 -0800
Inspired by a similar example in Flat Concurrent Prolog. Enjoy.
? define QMaker() {
> define [qtail, qhead] := PromiseMaker()
> define cons(elem, next) {
> define pair {
> to getElem { elem }
> to getNext { next }
> }
> }
> [define enqueue(elem) {
> define [nextTail, nextHead] := PromiseMaker()
> qhead resolve(cons(elem, nextTail))
> qhead := nextHead
> null
> },
> define dequeue() {
> define result := qtail <- getElem
> qtail := qtail <- getNext
> result
> }]
> }
# value: <QMaker>
? define [enq, deq] := QMaker()
# value: [<enqueue>, <dequeue>]
? enq(3)
? def a1 := deq()
# value: <Deferred ref>
? define a2 := deq()
# value: <Deferred ref>
? a1
# value: 3
? a2
# value: <Deferred ref>
? enq(4)
? a2
# value: 4