Exploring multi-core processors performance depends on the parallelism in programs. Shared memory model is widely adopted by multi-core processors, and coordinating access to shared variables among threads is the key and a very difficult problem as well. Lock mechanism is widely used for the synchronization between threads. However, conventional locking techniques in parallel systems have some common problems: priority inversion, convoying and deadlock. Transactional memory (TM) is proposed to make synchronization easy to realize and efficient, which adopts the transaction concept in database systems. Transactions in transactional memory with the atomicity, consistency and isolation properties provide a foundation to ensure that concurrent reads and writes of shared data do not produce inconsistent or incorrect results and execute atomically. Transactional memory attracts a lot of research interests now. Transactional memory research is still in progress and has not been systematized yet. The authors introduce the origin of transactional memory, and attempt to give a definition of transactional memory system. Transactional memory programming interface and its execution model are shown. TMs design space and its realization strategies are discussed and different techniques used in these aspects are compared. Transactional memory is not a parallel programming panacea. Several open issues are discussed then. Finally, a few open source research platforms are introduced.