CSemaphore

Об'єкт клас CSemaphore представляє "semaphore" — синхронізації об'єктів, що дозволяє обмежена кількість потоків в один або декілька процесів для доступу до ресурсу. CSemaphore об'єкт стверджує, кол кількість потоків, в даний час доступу до вказаний ресурс.

Семафорів є корисними у керування доступом до спільних ресурсів, які підтримують лише обмежена кількість користувачів. Поточний графа CSemaphore об'єкт є кількість додаткових користувачів дозволено. Якщо лічильник досягає нуля, всі спроби використання ресурсу під контролем CSemaphore об'єкт буде вставлено у черзі, системи і чекати, поки вони перевищення часу очікування або графа піднімається вище 0. Максимальна кількість користувачів, які можуть отримати доступ контрольованих ресурсів, одночасно вказані під час будівництва CSemaphore об'єкта.

Використовувати CSemaphore об'єкт, побудувати об'єкт CSemaphore , коли це необхідно. Укажіть ім'я semaphore, що ви хотіли б чекати, і що ваша заявка спочатку слід його власником. Ви може отримати доступ до semaphore, коли Конструктор повертає. Зателефонуйте CSyncObject::Unlock , якщо ви зробили доступу до контрольованих ресурсів.

Альтернативний метод, за допомогою об'єктів CSemaphore , це додати змінна типу CSemaphore як член даних класу ви хотіли керувати. При будівництві об'єкта, контрольоване викликаємо Конструктор CSemaphore компонент даних визначення початкового доступу графа, граф максимального доступу, ім'я semaphore (якщо вона буде використовуватися через процес межі) і бажане атрибути безпеки.

Доступ до ресурсів contolled CSemaphore об'єкти таким чином, спочатку створити змінну з будь-якого типу CSingleLock або CMultiLock у ваш ресурс доступ до член функції. Потім викликати функцію член Блокування блокування об'єкта (наприклад, CSingleLock::Lock). На даний момент ваш потік буде або отримати доступ до ресурсу, чекати ресурс, щоб бути звільнені і отримати доступ або чекати ресурс буде випущений і тайм-аут, не вдається отримати доступ до ресурсу. У будь-якому випадку, ваш ресурс переглядали потік безпечним чином. Звільнити ресурс, використовується функція блокування об'єкта розблокувати членів (наприклад, CSingleLock::Unlock) або дозволити блокування об'єкта падати з сфера.

Крім того, можна створити об'єкт CSemaphore автономний і явно доступ перед спробою доступу до контрольованих ресурсів. Цей метод, при більш чіткої для кого-то читав ваш вихідний код буде більш схильний до помилок.

Щоб отримати додаткові відомості про те, як використовувати CSemaphore об'єкти, перегляньте статтю Multithreading: як використовувати синхронізації класи в Visual C++ програміста керівництво.

# включити lt;afxmt.h>

|&Nbsp членів класу ; Базовий клас | Ієрархічна діаграма

Зразок  MFC зразок MUTEXES

Index