SW-STM - Software Transactional Memory

Memory transactions for Common Lisp.

Goals beside what's already common for most STM implementations:

  * Pessimistic, so no race conditions.

  * No thread starvation or livelock.

  * Ability to safely do I/O while in a transaction via the WHEN-COMMIT

  * Optional ability to execute I/O stuff (WHEN-COMMIT) concurrently - or to
    control this.

  * By default, "write skew" will never happen.

To find and debug potential concurrency problems it is probably a good idea to
do this:

  (setf sw-stm:-on-write-outside-transaction- :error)
  (setf sw-stm:-on-read-outside-transaction- :error)

By default these are set to NIL which will make development and testing via the
REPL less bothersome.

See examples/ and doc-strings.


Alpha, and I badly want to rewrite this. I'm happy with the API though, I think.