Lock free parallel programming: transactions, snapshots, and change descriptions