I read a paper on the subject of transactional memory years ago that was presented at OOPSLA in 2007 (I think). It was pitching the idea that there is an analogy between transactional memory and garbage collection. It made the topic more understandable for me and might be helpful:
http://www.cs.washington.edu/homes/djg/papers/analogy_oopsla...
I think this is an interesting explanation. The software product my company makes depends on a multi-threaded program which to date has had only one bug related to the fact it is a multi-threaded application. That bug was very serious mind you but it's the only one we've found (so far).