C Програмиране

POSIX семафори с програмиране на C

POSIX семафори с програмиране на C

POSIX се отнася до преносимия интерфейс на операционната система, който е IEEE стандарт, разработен за подпомагане преносимостта на различни приложения. POSIX е опит за изграждане на обща стандартизирана версия на UNIX чрез сътрудничество на доставчици. Това би улеснило пренасянето на приложения между хардуерни платформи, ако са ефективни. Hewlett-Packard интегрира POSIX в своята лицензирана MPE / iX OS версия 5.0 и HP / UXX версия 10.0, съответно (неговият UNIX).

Стандартът POSIX има много повече от десет части, но две са лесно достъпни. POSIX.1 описва интерфейси за програмиране на C (т.е.д., библиотека за системни повиквания) за файлове, процедури и I / O терминали. Пакетната библиотека C POSIX за платформи POSIX е рамка на стандартната библиотека C. Това се установява едновременно със стандартния ANSI C. За да се направи POSIX съвместим със стандарт C, са направени няколко опита. POSIX предоставя допълнителни функции към тези, внедрени в стандарт C.

POSIX семафори

Семафорът е структура от данни, често използвана за синхронизиране на процесите и подпомагане на нишки, без взаимодействието им помежду си, за да работят заедно. Интерфейсът за семафори е определен от стандарта POSIX. Не е част от Pthreads. Повечето UNIX-ове, които поддържат Pthreads, обаче осигуряват дори семафори. В Unix-подобни рамки, като Linux, семафорите се обединяват с опашки за съобщения и обща памет под услугите за междупроцесна комуникация (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.ч. Ще използваме Semaphore, за да опишем обект или обект като:

>> sem_t sem_name;

Ето различни функции, които бихме използвали в POSIX Semaphore.

Sem_init

За да инициализирате семафор, трябва да използвате метода sem_init. В тази функция sem съответства на инициализиран семафорен обект. Pshared е банер или флаг, който определя дали семафорът може да бъде споделен с раздвоена () процедура или не. Понастоящем споделените семафори не са подготвени от 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 Semaphore може доста лесно да се използва за предотвратяване на състезателни условия по време на кодиране.

Полезни инструменти за геймърите на Linux
Ако искате да играете игри на Linux, има вероятност да сте използвали приложения и помощни програми като Wine, Lutris и OBS Studio, за да подобрите иг...
HD Remastered Games за Linux, които никога преди не са имали издание на Linux
Много разработчици и издатели на игри излизат с HD ремастер на стари игри, за да удължат живота на франчайза, моля феновете, които искат съвместимост ...
Как да използвам AutoKey за автоматизиране на Linux игри
AutoKey е програма за автоматизация на настолни компютри за Linux и X11, програмирана в Python 3, GTK и Qt. Използвайки неговата функционалност за скр...