  Software Transactional Memory (STM) is an extensively studied paradigm that
provides an easy-to-use mechanism for thread safety and concurrency control.
With the recent advent of byte-addressable persistent memory, a natural
question to ask is whether STM systems can be adapted to support failure
atomicity. In this article, we answer this question by showing how STM can be
easily integrated with Intel's Persistent Memory Development Kit (PMDK)
transactional library (which we refer to as txPMDK) to obtain STM systems that
are both concurrent and persistent. We demonstrate this approach using known
STM systems, TML and NOrec, which when combined with txPMDK result in
persistent STM systems, referred to as PMDK-TML and PMDK-NORec, respectively.
However, it turns out that existing correctness criteria are insufficient for
specifying the behaviour of txPMDK and our concurrent extensions. We therefore
develop a new correctness criterion, dynamic durable opacity, that extends the
previously defined notion of durable opacity with dynamic memory allocation. We
provide a model of txPMDK, then show that this model satisfies dynamic durable
opacity. Moreover, dynamic durable opacity supports concurrent transactions,
thus we also use it to show correctness of both PMDK-TML and PMDK-NORec.
