Существует необходимость делать снимок узла древовидной структуры данных, оставляя возможность в неё писать.
Есть рабочее решение: дублировать структуру данных в полях actual и snapshot, при снятии снимка блокировать для записи поле snapshot, копировать его, обновления складывать в очередь. После копирования - снять блокировку, дописывать обновления из очереди. Проблема - очередь растёт.
Есть смутная идея с кольцевым буфером версий узла. Т.е. менять версию узла при каждой записи в него, перезаписывая самую старую версию.
Наверняка есть целый ряд классических решений сий задачи, который необразованный быдлоЯ просто не знаю.
Upd. Товарищь ещё предложил попробовать склеивать обновления в одну дельту, которую надо применить к снэпшоту.