Блокировки в MS SQL Server 2000
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: реферат на тему мыло, контрольная работа 7
| Добавил(а) на сайт: Васёна.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата
Теперь рассмотрим пример с использованием этих классов, который сразу вскрывает первую проблему.
unsigned __stdcall thread_proc(void*) { // Начало транзакции CProxy& prx = CObject::GetObject(); prx.value = 20; prx.Commit(); return 0; } int main(int argc, char* argv[]) { // Начало транзакции CProxy& prx = CObject::GetObject(); prx.value = 10; // Начало новой сессии _beginthreadex(0,0,thread_proc,0,0,0); // Эмулируем работу // Sleep(1000); printf("%dn",prx.value); prx.Commit(); return 0; } |
Здесь я в двух параллельных потоках изменяю значение переменной value объекта CObject: в одном – на 10, во втором – на 20. Что выведется на консоль? Определенно сказать нельзя: если раскомментировать строчку Sleep(1000), выведется 20. С закомментированной строчкой выводится 10. Эта проблема носит название «проблема потери последнего изменения» (lost update problem) или проблема «грязной» записи. Она заключается в том, что при одновременном выполнении транзакций, в которых производится изменение данных, невозможно сказать заранее, какое конечное значение примут данные после фиксирования обеих транзакций. В случае «грязной» записи только одна из всех параллельно выполняющихся транзакций будет работать с действительными данными, остальные – нет. Другими словами, хотя данные и будут находиться в согласованном состоянии, логическая их целостность будет нарушена.
Для того чтобы наш объект удовлетворял первому уровню изоляции транзакций, на котором запрещается «загрязнение» данных, перепишем его следующим образом (изменения касаются только класса CObject):
class CObject Рекомендуем скачать другие рефераты по теме: решебник по физике, украинские рефераты. Категории:Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата Поделитесь этой записью или добавьте в закладки |