Программирование на 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.е., библиотека системных вызовов) для файлов, процедур и терминалов ввода-вывода. Библиотека пакетов C POSIX для платформ POSIX представляет собой основу стандартной библиотеки C. Это установлено одновременно со стандартом ANSI C. Чтобы сделать POSIX совместимым со стандартом C, было предпринято несколько попыток. POSIX предоставляет дополнительные функции к тем, которые реализованы в стандартном C.

Семафоры POSIX

Семафор - это структура данных, часто используемая для синхронизации процессов и поддержки потоков без их взаимодействия друг с другом для совместной работы. Интерфейс для семафоров определяется стандартом POSIX. Не является частью Pthreads. Однако большинство UNIX, поддерживающих потоки Pthread, даже предоставляют семафоры. В Unix-подобных фреймворках, таких как Linux, семафоры объединяются с очередями сообщений и общей памятью под службами межпроцессного взаимодействия (IPC). Семафоры V старой платформы и современные семафоры POSIX становятся семафорами двух типов. Вызов семафоров POSIX намного проще, чем вызовы семафоров System V. Хотя семафоры System V получить легче, особенно на более ранних Unix-подобных платформах. Необходимо подключить программы, использующие семафоры POSIX, к библиотеке Pthread. Мы рассмотрим семафоры POSIX в этой статье.

Почему семафоры POSIX?

В отношении потоков существует большая проблема - «состояние гонки». Это обстоятельства, при которых два потока стремятся получить и изменить одну и ту же информацию, что приводит к ее противоречию. Чтобы избежать состояния гонки, мы очень давно используем семафоры.

Семафоры бывают двух видов:

Двоичный семафор:

Это также распознается как блокировка мьютекса. У него будет только два возможных значения: 0 и 1. Значение будет инициализировано как 1. Он используется для обеспечения выполнения многочисленных процессов для решения серьезной проблемы с разделом.

Подсчет семафоров:

Его размер может варьироваться в неограниченном домене. Он используется для управления доступом к ресурсам с множеством экземпляров.

Фреймворк Linux POSIX имеет интегрированный репозиторий семафоров. Чтобы использовать его, мы должны:

Практически все методы и формы семафоров POSIX прототипированы или указаны в 'Semaphore.час'. Мы будем использовать семафор для описания сущности или объекта как:

>> sem_t sem_name;

Вот различные функции, которые мы будем использовать в POSIX Semaphore.

Sem_init

Чтобы инициализировать семафор, вы должны использовать метод sem_init. В этой функции sem соответствует инициализированному объекту семафора. Pshared - это баннер или флаг, который указывает, может ли семафор использоваться совместно с процедурой forked () или нет. Общие семафоры в настоящее время не привязаны к LinuxThreads. Значение аргумента - это начальное значение, при котором семафор зафиксирован на.

>> int sem_init (sem_t * sem, int pshared, беззнаковое целое значение);

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. Он получит текущее значение семафора и будет помещен в пункт назначения с valp-указателем.

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

Sem_destroy

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

>> Int sem_destroy (sem_t * sem);

Установите утилиту GCC

Чтобы скомпилировать код POSIX Semaphore C, в вашей системе Linux должна быть установлена ​​утилита gcc. Для этого откройте командный терминал и попробуйте следующую команду.

$ sudo apt-get install gcc

Подтвердите свое действие, нажав Y.

Реализация семафора POSIX с программированием на 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 можно довольно легко использовать для предотвращения состояний гонки во время кодирования.

Как изменить направление прокрутки мыши и сенсорной панели в Windows 10
Мышь а также Сенсорная панельs не только упрощают вычисления, но и делают их более эффективными и требуют меньше времени. Мы не можем представить себе...
Как изменить указатель мыши и размер курсора, цвет и схему в Windows 10
Указатель мыши и курсор в Windows 10 - очень важные аспекты операционной системы. То же самое можно сказать и о других операционных системах, так что,...
Бесплатные движки с открытым исходным кодом для разработки игр для Linux
В этой статье будет рассмотрен список бесплатных игровых движков с открытым исходным кодом, которые можно использовать для разработки 2D- и 3D-игр в L...