Software transactional memory and refs

One of Clojure's most interesting features is software transactional memory (STM). It uses multiversion concurrency control (MVCC), in a very similar fashion to how databases work, implementing a form of optimistic concurrency control.

Note

MVCC is what databases use for transactions; what this means is that every operation within a transaction has its own copy of variables. After executing its operations, it checks if any of the used variables changed during the transaction and if they did the transaction fails. This is called optimistic concurrency control because we are optimistic and we don't lock any variable; we let every thread do its work thinking that it's going to work correctly and then check if ...

Get Clojure: High Performance JVM Programming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.