This is a good introduction to software transactional memory (STM), presented in terms of the Haskell implementation. STM is an interesting model for concurrent programming. It is an alternative to lock-based concurrency that appears to have great promise for resolving many of the problems associated with locks.
For instance, lock-based code is known not to be composable: if foo() and bar() both lock on the same variable, the composition foo(bar()) will deadlock. However, STM allows for composition. By enabling composition, STM allows for more modularity in concurrent code. This is a good thing.
STM fits quite naturally into Haskell’s strange-but-pretty type system. Go read the article, it’s quite good.