Поведение транзакций между объектами в памяти - PullRequest
0 голосов
/ 05 ноября 2011

Я хочу сделать последовательность операций в памяти атомарной. Я полагаю, что для этого не предусмотрена функциональность, предоставляемая фреймворком, и что мне нужно будет реализовать свою собственную функцию отката с помощью сувенира (или чего-то еще)?

1 Ответ

2 голосов
/ 05 ноября 2011

Если это должно быть действительно атомарно, в самом Framework нет такой вещи AFAIK - интересная ссылка, обсуждающая эту проблему .

То, что вы спрашиваете, называется STM (Software Transactional Memory) и является неотъемлемой частью, например, Haskell.

По сути, любая реализация использует какой-то механизм копирования - либо сохраняя старые данные до фиксации транзакции, либо сначала создавая копию, а затем делая все "изменения" в копии и переключая ссылки на коммит ... в любом случае всегда какой-то журнал и / или задействованный механизм копирования ...

Для C # проверьте эти ссылки:

ЕСЛИ F # - опция, тогда проверьте эти ссылки:

Другой вариант может заключаться в использовании «Базы данных в памяти» - есть несколько с поддержкой транзакций, обеспечивающих атомарную работу через БД ... пока БД находится в памяти, она должна выполнять хорошо

...