PMThreads: persistent memory threads harnessing versioned shadow copies (Proceedings of the 41st ACM SIGPLAN Conference on Programming Language Design and Implementation)