1. A method of controlling an atomic transaction having access to a shared memory, the method comprising: enlisting at least one non-memory resource manager; enlisting a memory resource manager configured to manage a transactional memory; calling a commit protocol configured to determine whether the non-memory and memory resource managers vote to commit the transaction; committing the transaction if the non-memory and memory resource managers vote to commit the transaction; re-executing the transaction if the memory resource manager does not vote to commit the transaction; and aborting the transaction if at least one of the non-memory resource managers does not vote to commit the transaction.