Software transactional memory
Introduction
Software Transactional Memory, or STM, is an abstraction for concurrent communication. The main benefits of STM are composability and modularity. That is, using STM you can write concurrent abstractions that can be easily composed with any other abstraction built using STM, without exposing the details of how your abstraction ensures safety. This is typically not the case with other forms of concurrent communication, such as locks or MVars.
STM for Haskell was first implemented in GHC 6.4. There exist STM implementations for other compilers.
Resources
- Beautiful Concurrency - a chapter from the book Beautiful Code
- Programming in the Age of Concurrency: Software Transactional Memory - interview of Simon Peyton-Jones and Tim Harris.
Projects using STM
As of April 2011, there were more than 200 projects on Hackage with dependencies on GHC's STM implementation, including:
- Conjure (a bittorrent client) is using STM quite heavily.
- Shellac is a framework for building read-eval-print style shells. It uses STM, but in a pretty limited way.
- Pugs (an implementation of Perl 6 in Haskell) uses STM, and also exposes STM to the Perl 6 programmer via a similar interface to STM Haskell.
- Happstack, a web framework
- TCache, a transactional cache with configurable persitence.
- Barracuda, An ad-hoc chat program
- Combinatorrent, a BitTorrent client, based on STM for concurrency
- Scurry, P2P VPN implementation.
Examples
- Examples from this wiki: Search for "concurrent.stm" at the top of this page.