Как я делаю процесс в оперативной памяти транзакционным?

Netbeans имеет что-то вроде этого.

здесь существует демонстрация: http://www.netbeans.org/kb/55/persistence-demo.html

5
задан Community 23 May 2017 в 12:07
поделиться

4 ответа

Практически каждый вариант для этого требует одного из трех основных методов:

  1. Сделайте копию ваших данных перед изменениями, чтобы вернуться в состояние отката в случае прерывания.
  2. Работайте с копией данных, обновляйте оригинал при фиксации.
  3. Вести журнал изменений ваших данных, чтобы отменить их в случае прерывания.

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

9
ответ дан 13 December 2019 в 19:30
поделиться

Взгляните на исследовательский проект Microsoft, SXM .

Со страницы Мориса Херлихи вы можете загрузить документацию, а также образцы кода .

1
ответ дан 13 December 2019 в 19:30
поделиться

Вы спросили:

«Что, если во время фиксации произойдет ошибка?»

Это не имеет значения. Вы можете зафиксировать где-то / что-то в памяти и тем временем проверить, удалась ли операция. Если это так, вы меняете ссылку намеченного объекта (объект A) на то, где вы зафиксировали (объект B). Тогда у вас есть отказоустойчивые фиксации - ссылка обновляется только при успешной фиксации. Изменение ссылки является атомарным.

1
ответ дан 13 December 2019 в 19:30
поделиться
public void TransactionalMethod()
{
    var items = GetListOfItems();

    try {
        foreach (var item in items)
        {           
            MethodThatMayThrowException(item);

            item.Processed = true;
        }
    }
    catch(Exception ex) {
        foreach (var item in items)
        {
            if (item.Processed) {
                UndoProcessingForThisItem(item);
            }
        }
    }
}

Очевидно, что выполнение команды «Отменить ...» оставлено как упражнение для читателя.

0
ответ дан 13 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: