I think Haskell's Software Transactional Memory has used this novel write-snapshot isolation level for close to two decades.
"...We introduce write-snapshot isolation, a novel isolation level that has a performance comparable with that of snapshot isolation, and yet provides serializability. The main insight in write-snapshot isolation is to prevent read-write conflicts in contrast to write-write conflicts that are prevented by snapshot isolation."