In this model, programmers write multithreaded (or serial) code just like today and take advantage of persistent memory with a few lines of code changes. In contrast with transactions, durable critical sections are generated for lock-based multithreaded programs. While persistent data is identified based on allocation, code for failure resilience is automatically generated for the most part with a combination of compiler and runtime support. There are a set of APIs for a persistent allocator and example programs showing how to use them.
Hope you find it useful!
Dhruva