Образовательный портал Claw.ru
Всё для учебы, работы и отдыха
» Шпаргалки, рефераты, курсовые
» Сочинения и изложения
» Конспекты и лекции
» Энциклопедии

Добавленный код выделен. Хочется пояснить одну деталь: так как изменять значение переменной value можно несколько раз, а Commit (или Rollback) вызывать только раз, налицо тот факт, что функция EnterCriticalSection вызывается бОльшее количество раз, нежели LeaveCriticalSection. Это ошибка – в соответствии с документацией количество вызовов функций EnterCriticalSection и LeaveCriticalSection должно совпадать. Поэтому после входа в критическую секцию я проверяю поле RecursionCount, которое устанавливает количество повторных входов потока в критическую секцию.

ПРИМЕЧАНИЕ

При работе под ОС семейства Windows 9x это поле не используется и всегда содержит 0, так что приводимый здесь и далее код будет работать только на операционных системах семейства NT.

Теперь можно определенно сказать, что выведется на консоль в следующем примере:

unsigned __stdcall thread_proc(void*)

{

 // Начало второй транзакции

 CProxy& prx = CObject::GetObject(CObject::READ_UNCOMMITTED);

 // Здесь поток будет ожидать примерно 1 сек. До тех пор, пока

 // в главном потоке не будет выполнена строчка prx.Commit();

 prx.value = 20;

 prx.Commit();

 return 0;

}

int main(int argc, char* argv[])

{

 //Начало транзакции с 0 уровнем изоляции

 CProxy& prx = CObject::GetObject(CObject::READ_UNCOMMITTED);

 //Изменение данных

 prx.value = 10;


Рекомендуем скачать другие рефераты по теме: решебник по физике, украинские рефераты.


Категории:




Предыдущая страница реферата | 4  5  6  7  8  9  10  11  12  13  14 |


Поделитесь этой записью или добавьте в закладки

   



Рефераты от А до Я