Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora_oop.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
258.05 Кб
Скачать

48.Транзакции.

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

Пример: Необходимо перевести с банковского счёта номер 5 на счёт номер 7 сумму в 10 денежных единиц. Этого можно достичь, к примеру, приведённой последовательностью действий:

  • Начать транзакцию( прочесть баланс на счету номер 5; уменьшить баланс на 10 денежных единиц;сохранить новый баланс счёта номер 5;прочесть баланс на счету номер 7;увеличить баланс на 10 денежных единиц; сохранить новый баланс счёта номер 7

  • Окончить транзакцию

Эти действия представляют из себя логическую единицу работы «перевод суммы между счетами», и таким образом, являются транзакцией. Если прервать данную транзакцию, к примеру, в середине, и не аннулировать все изменения, легко оставить владельца счёта номер 5 без 10 единиц, тогда как владелец счета номер 7 их не получит.

____________________

template <class T1>

class A

{

T1 x;

public:

void set(T1 X){x=X;}

T1 get(){return x;}

void Show(){cout<<x<<endl;}

};

template <class T2>

class Tran

{

T2 *that; //текущее значение объекта класса A

T2 *prev; //предыдущее

public:

Tran(){prev = NULL; that = new T2;}

Tran(const Tran &obj):that(new T2(*(obj.that))),prev(NULL){}//constr copy for A

~Tran() {delete prev; delete that;}

Tran &operator = (const Tran & obj);

void Show();

void Begin_Tran(); //начать

void Commit(); //закрепить

void Del_Tran(); //отменить

T2 *operator->();

};

template <class T2>

Tran <T2> & Tran <T2>::operator = (const Tran & obj)

{

if(this!=&obj) { delete that; that = new T2(*(obj.that)); } //prev не трогаем, чтобы

return *this; // можно было сделать откат

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]