Контрольная работа: Особливості багатозадачності в середовищі Windows

//...

// Создание потоков, и т.д.

//...

}

BOOL WriteToBuffer()

{ DWORD dwWaitResult;

// Ждем освобождения мьютекса перед тем как обратиться к буферу.

dwWaitResult = WaitForSingleObject(hMutex, 5000L); // 5 секунд на таймаут

if (dwWaitResult == WAIT_TIMEOUT) // Таймаут. Мьютекс за єто время не освободился.

{

return FALSE;

}

else // Мьютекс освободился, и наш поток его занял. Можно работать.

{

Write_to_the_buffer().

...

ReleaseMutex(hMutex); // Освобождаем мьютекс.

}

return TRUE;

Семафор

Ще один вид синхронізаторів - семафор, що виключає. Основна його відмінність від критичної секції полягає в тім, що останню можна використовувати тільки в межах одного процесу (одного запущеного додатка), а семафорами, що виключають, можуть користатися різні процеси.

Semaphore – глобальний об’єкт синхронізації, що має лічильник для ресурсів, з ним пов‘язаних. В достатньо грубому приближенні м‘ютекс можна розглядати, як частковий випадок семафора з двома станами.

Іншими словами, критичні розділи - це локальні семафори, що доступні в рамках тільки однієї програми, а семафори, що виключають, можуть бути глобальними об'єктами, що дозволяють синхронізувати роботу програм (тобто різні запущені додатки можуть розділяти ті самі дані).

Розглянемо основні функції семафора, що виключає, на прикладі роботи з об'єктами mutex.

1. Створення об'єкта mutex

HANDLE CreateMutex(

LPSECURITY_ATTRIBUTES lpMutexAttributes,

BOOL bInitialOwner,

LPCTSTR lpName)

К-во Просмотров: 451
Бесплатно скачать Контрольная работа: Особливості багатозадачності в середовищі Windows