These slides are from a talk Mark Volkmann gave at the Strange Loop Conference, he has a more detailed article on Clojure's implementation of STM here: http://java.ociweb.com/mark/stm/article.html
At the risk of mentioning something I did myself, here is a simple, STM implementation in C: http://github.com/skaphan/stmmap . It's at a very different design point from others like Clojure's in that it is just a simple API, not a language mechanism, it is for concurrency at the process level, not threads, adds no extra "goo" between the program and its data, but has a fairly coarse grain size for conflict detection (page size). Who knows, it might be appropriate for some situations...