package: smc

module: stm

The stm module implements a software transactional memory system. The functions exported by this module are documented in the following sections.

stm.var


stm.var(init_val = false, group = false)
      

Return a new transactional variable initialized to init_val.

A transactional variable is usually read and written within the context of a running transaction. The optional argument group specifies the transaction group that will be associated with this variable. A program may choose to group together transaction variables to improve performance.

stm.read


stm.read(tvar, txn)
      

Return the value of the transaction variable tvar as seen in the context of the transaction txn.

stm.read_enforce


stm.read_enforce(tvar, txn)
      

Return the value that was last committed to the transaction variable tvar. This function should be called only if the transaction txn wants to make sure tvar meets some constraints before a new value is written to it.

stm.write


stm.write(tvar, new_val, txn)
      

Write the value new_val to the transaction variable tvar. Return void.

This new value will be visible only within the transaction txn. The new value will be made visible to the rest of the system only after the transaction has successfully committed tvar.

stm.peek


stm.peek(tvar)
      

Return the value of the transaction variable tvar that was last committed. This function may return an inconsistent value.

stm.transact


stm.transact(fn)
      

Call the function fn with a new transaction as its argument. Return the value of fn.

Example:


let t = stm.var(100)
!stm.transact(^(txn) stm.write(t, stm.read(t, txn) + 10, txn))
task_sleep(2)
stm.peek(t)
// 110
      

stm.abort


stm.abort(txn, val = false)
      

Abort the transaction txn and return val.

All transactions (at any level of "nesting") must be explicitly aborted.

stm.retry


stm.retry(txn)
      

Restart the transaction. All changes made to local transaction variables will be reset.

All transactions (at any level of "nesting") must be explicitly restarted.

stm.group


stm.group(@optional name = false)
      

Return a new transaction group with the given name.


Index | Packages Index