A method of implementing a transactional memory system comprising: using a volatile memory as primary storage for transactions associated with the transactional memory system; and selectively storing data in a non-volatile memory to impart durability to the transactional memory system to allow the transactional memory system to be restored to a consistent state in the event of data loss to the volatile memory, wherein, the act of selectively storing comprises: copying data stored in the volatile memory into a first non-volatile memory region to generate a checkpoint; logging records that reflect transactions that occurred after the generation of the checkpoint in a second non-volatile memory region; associating the stored data with ordering identifiers assigned by the transactional memory system to transactions that generated the data; and providing a first indication to a thread that data associated with a transaction has been stored in the volatile memory but before the data has been stored in the non-volatile memory while the system is in an asynchronous mode and a second indication to the thread that the data has been stored in both the volatile memory and the non-volatile memory while the system is in a synchronous mode. using a volatile memory as primary storage for transactions associated with the transactional memory system; and selectively storing data in a non-volatile memory to impart durability to the transactional memory system to allow the transactional memory system to be restored to a consistent state in the event of data loss to the volatile memory, wherein, the act of selectively storing comprises: copying data stored in the volatile memory into a first non-volatile memory region to generate a checkpoint; logging records that reflect transactions that occurred after the generation of the checkpoint in a second non-volatile memory region; associating the stored data with ordering identifiers assigned by the transactional memory system to transactions that generated the data; and providing a first indication to a thread that data associated with a transaction has been stored in the volatile memory but before the data has been stored in the non-volatile memory while the system is in an asynchronous mode and a second indication to the thread that the data has been stored in both the volatile memory and the non-volatile memory while the system is in a synchronous mode. copying data stored in the volatile memory into a first non-volatile memory region to generate a checkpoint; logging records that reflect transactions that occurred after the generation of the checkpoint in a second non-volatile memory region; associating the stored data with ordering identifiers assigned by the transactional memory system to transactions that generated the data; and providing a first indication to a thread that data associated with a transaction has been stored in the volatile memory but before the data has been stored in the non-volatile memory while the system is in an asynchronous mode and a second indication to the thread that the data has been stored in both the volatile memory and the non-volatile memory while the system is in a synchronous mode.