Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Новые рефераты » Використання семафорів для синхронізації потоків

Реферат Використання семафорів для синхронізації потоків





о, що при завершенні процесу всі створені ним семафори знищуються автоматично.

Якщо семафор використовується тільки для синхронізації завдань, створених в рамках одного програми, ви можете створити безіменний семафор, вказавши як параметр lpszSemName функції CreateSemaphore () значення NULL. p> У тому випадку, коли необхідно синхронізувати завдання різних процесів, слід визначити ім'я семафора. При цьому один процес створює семафор за допомогою функції CreateSemaphore, а другий відкриває його, отримуючи ідентифікатор для вже існуючого семафора.

Існуючий семафор можна відкрити функцією OpenSemaphore (), синтаксис якої наступний

HANDLE OpenSemaphore (DWORD dwAccessFlag, BOOL bInherit, LPCTSTR lpszSemName)

Параметри:

dwAccessFlag - Покажчик на необхідний тип доступу до семафору;

bInherit - Визначає можливість наслідування семафора іншими процесами, створювані функцією CreateProcess ();

lpszSemName-вказівник на рядок, містить ім'я відкривається семафора. p> повертається. При успішному виконанні функція повертає хендл відкритого семафора, в іншому випадку - повертається NULL.

Прапори доступу можуть приймати одне з трьох значень:


Параметр

Опис

SEMAPHORE_ALL_ACCESS

Встановлює все можливе прапори доступу для даного семафора

SEMAPHORE_MODIFY_STATE

Дозволяє зміна лічильника ресурсів у функції ReleaseSemaphore ()

SYNCHONIZE

Дозволяє використання в будь-який з чекаючих функцій сигналу про зміну стану семафора


Для збільшення значення лічильника семафора програма має використовувати функцію ReleaseSemaphore (), синтаксис якої виглядає наступним чином

BOOL ReleaseSemaphore (HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviosCount)

Параметри:

hSemaphore - Хендл звільненого об'єкта семафора;

lReleaseCount - число, яке визначає значення, встановлене в лічильнику ресурсів семафора при його звільнення;

lpPreviosCount - покажчик на місце зберігання попереднього значення лічильника.

повертається. При успішному виконанні функція повертає TRUE, в іншому випадку - повертається NULL.

Функція ReleaseSemaphore () збільшує значення лічильника семафора, ідентифікатор якого передається їй через параметр hSemaphore, на значення, вказане в параметрі lReleaseCount.

Зауважимо, що через параметр lReleaseCount ви можете передавати тільки позитивне значення, більше нуля. p> При цьому якщо в результаті збільшення нове значення лічильника повинно буде перевищити максимальне значення, задане при створенні семафора, функція ReleaseSemaphore () повертає ознака помилки і не змінює значення лічильника. p> Попереднє значення лічильника, яке було до використання функції ReleaseSemaphore (), записується в змінну типу LONG. Адреса цієї змінної передається функції через параметр lpPreviousCount.

Таким чином, функція використовується для вирішення двох завдань:

перше, за допомогою цієї функції завдання звільняють ресурс, доступ до якого регулюється світлофором. Вони можуть робити це після використання ресурсу або перед своїм завершенням. p> друге, ця функція може бути використана на етапі ініціалізації мультизадачного додатки. p> Створюючи семафор з початковим значенням лічильника, рівним нулю, головне завдання блокує роботу завдань, що виконують очікування цього семафора. Після завершення ініціалізації головне завдання за допомогою функції ReleaseSemaphore () може збільшити значення лічильника семафора до максимального, в результаті чого відоме кількість очікують завдань буде активізовано.

У програмному інтерфейсі операційної системи Windows немає функції, спеціально призначеної для зменшення значення лічильника семафора. p> Цей лічильник зменшується, коли завдання викликає функції очікування, такі як WaitForSingleObject () або WaitForMultipleObject (). Якщо завдання викликає кілька разів функцію очікування для одного і того ж семафора, вміст його лічильника щоразу буде зменшуватися.

Таким чином, алгоритм роботи з семафора виглядає наступним чином:

- потік створює або відкриває семафор за допомогою функцій CreateSemaphore () або OpenSemaphore () відповідно;

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

- при завершенні потік викликає функцію ReleaseSemaphore (), що звільняє семафор.

Єдина можливість визначення поточного значення лічильника семафора полягає в збільшенні цього значення функцією ReleaseSe...


Назад | сторінка 3 з 4 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Докладне вивчення роботи фінансової функції ДАТАКУПОНДО, яка повертає число ...
  • Реферат на тему: Призначення, пристрій лічильника теплової, автоматизація його роботи
  • Реферат на тему: Створення програми для обчислення значення функції
  • Реферат на тему: Значення і функції атмосфери
  • Реферат на тему: Значення і функції філософії