Що таке тип sem_t у C?

сім_т сім; де sem_t є typedef, визначеним у файлі заголовка як (мабуть) різновид беззнакового символу. Прикладом цього може бути те, що ми маємо набір із N взаємозамінних ресурсів. Ми починаємо з семафор

семафор

У інформатиці семафор — це змінний або абстрактний тип даних, який використовується для керування доступом до спільного ресурсу кількома потоками та уникнення проблем із критичними розділами в паралельній системі, такій як багатозадачна операційна система. Семафори є різновидом примітиву синхронізації.

https://en.wikipedia.org › wiki › Семафор_(програмування)

S = N. Ми використовуємо ресурс, тому зараз доступний N-1 (зачекайте), і ми повертаємо його, коли закінчимо (опублікувати).

Функція sem_init() є використовується для ініціалізації безіменного семафора, на який посилається sem. Значенням ініціалізованого семафора є значення. Після успішного виклику sem_init() семафор можна використовувати в наступних викликах sem_wait(), sem_trywait(), sem_post() і sem_destroy().

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

sem_post() просто збільшує семафор і активує будь-який потік, що очікує, якщо такий є. Інакше нічого не робить. sem_wait() просто зменшує семафор. Абонент буде заблокований, тільки якщо поточне значення семафора дорівнює 0.

Підпрограма sem_post розблоковує семафор, на який посилається параметр sem, виконуючи операцію розблокування семафора на цьому семафорі. Якщо значення семафора, отримане в результаті цієї операції, додатне, жоден з потоків не було заблоковано в очікуванні розблокування семафора, і значення семафора збільшується.

Зокрема, якщо sem_open() повертає вказівник на щойно виділений семафор, sem_init() приймає посилання на змінну семафора (оголошену як sem_t), яка вже була виділена в межах пам’яті поточного процесу, і встановлює семафор на передане значення .