Chapter 10. Mutation and concurrency
This chapter covers
- Software transactional memory with multiversion concurrency control and snapshot isolation
- When to use refs
- When to use agents
- When to use atoms
- When to use locks
- Vars and dynamic binding
Clojure’s main tenet isn’t the facilitation of concurrency. Instead, Clojure at its core is concerned with the sane management of state, and facilitating concurrent programming naturally falls out of that. Concurrency refers to designing systems using independently executing, logic processes (Pike 2012). A simple concurrent design is a single thread named Tom inserting data into a work queue, as shown in figure 10.1.
Figure 10.1. Tom, alone
Of course, although this is technically a concurrent ...