C Програмування

POSIX семафори з програмуванням на C

POSIX семафори з програмуванням на C

POSIX відноситься до портативного інтерфейсу ОС, що є стандартом IEEE, розробленого для сприяння переносимості різних додатків. POSIX - це спроба створити загальну стандартизовану версію UNIX за допомогою співпраці постачальників. Це полегшить перенесення програм між апаратними платформами, якщо вони ефективні. Hewlett-Packard інтегрує POSIX у свою ліцензовану ОС MPE / iX версії 5.0 та HP / UXX версії 10.0, відповідно (його UNIX).

Стандарт POSIX містить набагато більше десяти частин, однак дві легко отримати. POSIX.1 описує інтерфейси програмування на C (i.e., бібліотека системних викликів) для файлів, процедур та терміналів вводу-виводу. Бібліотека пакетів C POSIX для платформ POSIX є основою стандартної бібліотеки C. Це встановлено одночасно зі стандартом ANSI C. Щоб зробити POSIX сумісним зі стандартом C, було зроблено кілька спроб. POSIX надає додаткові функції до тих, що реалізовані в стандартній C.

POSIX семафори

Семафор - це структура даних, яка часто використовується для синхронізації процесів та надання допомоги потокам без їх взаємодії між собою для спільної роботи. Інтерфейс для семафорів визначається стандартом POSIX. Він не є частиною Pthreads. Однак більшість UNIX, які підтримують Pthreads, навіть надають семафори. У Unix-подібних фреймворках, таких як Linux, семафори об'єднуються з чергами повідомлень і загальною пам'яттю під службами Interprocess Communication (IPC). Старі семафори V та сучасні семафори POSIX стають двома типами семафорів. Виклики через POSIX Semaphore набагато простіші, ніж виклики System V Semaphore. Хоча семафори System V легше отримати, особливо на попередніх Unix-подібних платформах. Існує необхідність підключати програми, що використовують семафори POSIX, до бібліотеки Pthread. У цій статті ми розглянемо семафори POSIX.

Чому POSIX семафори?

Існує велика проблема навколо потоків, яка є "умовою раси". Це обставина, коли дві нитки прагнуть отримати та змінити одну і ту ж інформацію, тим самим роблячи її суперечливою. Щоб уникнути перегонових умов, ми використовуємо семафори дуже довго.

Семафори доступні у 2 видах:

Бінарний семафор:

Він також розпізнається як блокування мьютексів. Він міг би мати лише два можливих значення, 0 і 1. Значення буде ініціалізовано як 1. Він використовується для забезпечення численних процесів для вирішення серйозної проблеми розділу.

Підрахунок семафору:

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

Структура Linux POSIX має вбудоване сховище Semaphore. Щоб використовувати його, ми повинні:

Майже всі методи та форми POSIX Semaphore прототипуються або вказані в 'Semaphore.h '. Ми будемо використовувати Семафор для опису сутності або об’єкта як:

>> sem_t sem_name;

Ось різні функції, які ми використовували б у POSIX Semaphore.

Sem_init

Щоб ініціалізувати семафор, вам потрібно використовувати метод sem_init. У цій функції sem відповідає ініціалізованому семафорному об’єкту. Pshared - це банер або прапор, який визначає, чи можна надавати спільний доступ до семафору за допомогою процедури forked () чи ні. На сьогодні спільні семафори не підтримуються LinuxThreads. Значення аргументу - це початкове значення, за яким закріплений семафор.

>> int sem_init (sem_t * sem, int pshared, значення int без підпису);

Sem_wait

Ми будемо використовувати метод sem-wait, щоб утримати / заблокувати семафор або змусити його зачекати. Якщо семафор отримав від’ємне значення, то цикл дзвінків буде автоматично заблокований. Щоразу, коли будь-який інший потік викликає sem_post, пробуджується один із вже засмічених процесів.

>> int sem_wait (sem_t * sem);

Sem_post

Ми будемо використовувати метод sem_post для збільшення значення семафору. Після виклику sem_post збільшить значення, і пробудиться один із вже засмічених або очікуючих процесів.

>> int sem_post (sem_t * sem);

Sem_getvalue

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

>> Int sem_getvalue (sem_t * sem, int * valp);

Sem_destroy

Ви повинні використовувати метод sem_destroy, якщо хочете знищити семафор. Якщо загибель семафору триватиме, жодна нитка не буде чекати в семафорі.

>> Int sem_destroy (sem_t * sem);

Встановіть утиліту GCC

Для компіляції коду POSIX Semaphore C у вас повинна бути встановлена ​​утиліта gcc у вашій системі Linux. Для цього відкрийте свій командний термінал і спробуйте команду нижче.

$ sudo apt-get install gcc

Підтвердьте свою дію, натиснувши Y.

Впровадження POSIX Semaphore з програмуванням на C в Ubuntu

На самому початку вам потрібно створити новий файл із .cpp на Ubuntu 20.04 система. Для цього вам потрібно перейти до домашнього каталогу та створити новий порожній файл із назвою new.cpp. Ви також можете створити його за допомогою сенсорної команди у своєму командному терміналі.

Ви бачите, що нове.Файл cpp створено в домашній директорії.


Після створення .cpp, відкрийте його як текстовий редактор у вашій системі Linux і напишіть у цьому файлі такий код, як він є. Після цього збережіть і закрийте.

Виконайте програму POSIX Semaphore C в Ubuntu 20.04

Відкрийте термінал в Ubuntu 20.04 та виконайте наведену нижче команду gcc, а потім ім'я файлу.

$ gcc ім'я файлу.c -lpthread -lrt

Утворюються 2 нитки, одна формується через 2 секунди іншої. Отримавши болт, найперша нитка спить протягом 4 секунд. Отже, після його виклику другий потік не буде приєднуватися безпосередньо, і це з’явиться через 4-2 = 2 секунди після того, як його буде викликано. Ось результат:

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

Висновок

У цьому посібнику подано детальний огляд використання POSIXSemaphore з програмуванням на C в Ubuntu 20. Просто використовуючи бібліотеку POSIX або Pthread протягом певного коду C, семафор POSIX можна досить легко використовувати для запобігання расовим умовам під час кодування.

Підручник Тінь розкрадача гробниць для Linux
Shadow of the Tomb Raider - дванадцяте доповнення до серії Tomb Raider - франшизи екшн-пригодницької гри, створеної Eidos Montreal. Гру сприйняли як к...
Як збільшити FPS в Linux?
FPS означає Кадри в секунду. Завданням FPS є вимірювання частоти кадрів при відтворенні відео або ігрових виставах. Простими словами кількість безпере...
Найкращі лабораторні ігри Oculus App
Якщо ви є власником гарнітури Oculus, то вам потрібно дізнатися про бокове завантаження. Бокове завантаження - це процес встановлення негарнітного вмі...