Локальные сети персональных компьютеров. Работа с сервером Novell NetWare


Программа SEMSIGN - часть 2


// Открываем семафор с именем SEMLOCK

ccode = OpenSemaphore("SEMLOCK", 1, &SemaphoreHandle, &OpenCount);

if(!ccode) { printf("Семафор SEMLOCK открыт\n"); printf("Handle = %ld, OpenCount = %d\n", SemaphoreHandle, OpenCount); } else { printf("Ошибка при открытии семафора " "SEMLOCK %02.2X\n", ccode); return; }

// Определяем текущее состояние семафора

ccode = ExamineSemaphore(SemaphoreHandle, &SemaphoreValue, &OpenCount);

if(!ccode) { printf("SemaphoreValue = %d\n", SemaphoreValue); } else printf("Ошибка при получении состояния семафора " "SEMLOCK %02.2X\n", ccode);

// Запрашиваем доступ к критическому ресурсу, // ожидаем получение доступа в течение 20 секунд

printf("Запрашиваем доступ к критическому ресурсу...\n");

ccode = WaitOnSemaphore(SemaphoreHandle, 18*20);

if(!ccode) { printf("Доступ к критическому ресурсу получен\n"); } else { printf("Ресурс заблокирован, ошибка %02.2X\n", ccode); return; }

// Теперь, если мы получили доступ к ресурсу, можно выполнять с ним // необходимые действия. В нашей программе мы ничего не делаем, // просто ожидаем, пока оператор не нажмет любую клавишу

printf("Нажмите любую клавишу для освобожения ресурса\n"); getch();

// Освобождаем ресурс

ccode = SignalSemaphore(SemaphoreHandle);

if(!ccode) { printf("Ресурс освобожден\n"); } else printf("Ошибка при освобождении ресурса %02.2X\n", ccode);

// Закрываем семафор

ccode = CloseSemaphore(SemaphoreHandle);

if(!ccode) printf("Семафор SEMLOCK закрыт\n"); else printf("Ошибка при закрытии семафора " "SEMLOCK %02.2X\n", ccode); }




Начало  Назад  



Книжный магазин