Difference between revisions of "Software transactional memory"

From HaskellWiki
Jump to navigation Jump to search
(fixed link)
(link)
Line 8: Line 8:
   
 
* [[Research_papers/Parallelism_and_concurrency#Lock_free_data_structures_and_transactional_memory|Research Papers on STM]]
 
* [[Research_papers/Parallelism_and_concurrency#Lock_free_data_structures_and_transactional_memory|Research Papers on STM]]
  +
  +
* [http://www.haskell.org/ghc/docs/latest/html/libraries/base/GHC-Conc.html * Documentation for the Control.Concurrent.STM primitives GHC]
   
 
* [http://www.haskell.org/ghc/docs/latest/html/libraries/stm/Control-Concurrent-STM.html Documentation for the Control.Concurrent.STM module in GHC]
 
* [http://www.haskell.org/ghc/docs/latest/html/libraries/stm/Control-Concurrent-STM.html Documentation for the Control.Concurrent.STM module in GHC]

Revision as of 06:45, 11 December 2006

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

Projects using STM, and example code

  • Conjure (a bittorrent client) is using STM quite heavily.
  • The HAppS MACID monad runs on top of STM. It is open source and available via darcs at http://happs.org. http://Pass.net is a production application that uses this infrastructure.
  • 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.