Transactional Memory: Architectural Support For Lock-free Data Structures