C Programmeren

POSIX-semaforen met C-programmering

POSIX-semaforen met C-programmering

POSIX verwijst naar de draagbare interface van het besturingssysteem, een IEEE-standaard die is ontwikkeld om de overdraagbaarheid van verschillende toepassingen te ondersteunen. POSIX is een poging om een ​​gemeenschappelijke gestandaardiseerde versie van UNIX te bouwen door middel van een samenwerking van leveranciers. Het zou het overdragen van apps tussen hardwareplatforms gemakkelijker maken als ze effectief zijn. Hewlett-Packard integreert POSIX in zijn gelicentieerde MPE/iX OS-versie 5.0 en HP/UXX versie 10.0, respectievelijk (zijn UNIX).

De POSIX-standaard heeft veel meer dan tien delen, maar twee zijn gemakkelijk verkrijgbaar. POSIX.1 beschrijft C programmeerinterfaces (i.e., een systeemoproepbibliotheek) voor bestanden, procedures en I/O-terminals. De C POSIX-pakketbibliotheek voor POSIX-platforms is een raamwerk van de C-standaardbibliotheek. Dit wordt tegelijkertijd met de standaard ANSI C . vastgesteld. Om POSIX compatibel te maken met standaard C, zijn er verschillende pogingen gedaan. POSIX biedt extra functies naast die geïmplementeerd in standaard C.

POSIX semaforen

Een semafoor is een gegevensstructuur die vaak wordt gebruikt voor het synchroniseren van de processen en het helpen van threads zonder hun interactie met elkaar om samen te werken. De interface voor semaforen wordt gespecificeerd door de POSIX-standaard. Het maakt geen deel uit van Pthreads. De meeste UNIX-en die Pthreads ondersteunen, bieden echter zelfs semaforen. In Unix-achtige frameworks, zoals Linux, worden semaforen samengevoegd met berichtenwachtrijen en gemeenschappelijk geheugen onder de Interprocess Communication (IPC)-services. De oudere raamwerk V-semaforen en de moderne POSIX-semaforen worden twee soorten semaforen. POSIX Semaphore-oproepen is zoveel gemakkelijker dan System V Semaphore-oproepen. Hoewel System V-semaforen gemakkelijker te verkrijgen zijn, vooral op eerdere Unix-achtige platforms. Het is nodig om programma's die POSIX-semaforen gebruiken te verbinden met de Pthread-bibliotheek. We zullen de POSIX-semaforen in dit artikel bekijken.

Waarom POSIX-semaforen?

Er is een groot probleem rond threads, wat "raceconditie" is. Het is een omstandigheid waarin twee threads dezelfde informatie proberen te verkrijgen en wijzigen, waardoor het conflicterend wordt. Om een ​​raceconditie te voorkomen, gebruiken we al heel lang semaforen.

Semaforen zijn er in 2 soorten:

Binaire semafoor:

Het wordt ook herkend als een mutex-slot. Het zou slechts twee mogelijke waarden hebben, 0 en 1. De waarde wordt geïnitialiseerd als 1. Het wordt gebruikt om talloze processen af ​​te dwingen om het serieuze sectieprobleem op te lossen.

Seinpaal tellen:

De grootte kan variëren binnen een onbeperkt domein. Het wordt gebruikt om autoriteit te hebben over toegang tot bronnen met meerdere instanties.

Het Linux POSIX-framework heeft zijn geïntegreerde Semaphore-repository. Om het te gebruiken, moeten we:

Bijna alle POSIX Semaphore-methoden en -vormen zijn geprototypeerd of gespecificeerd in 'Semaphore'.h'. We zullen de semafoor gebruiken om een ​​entiteit of object te beschrijven als:

>> sem_t sem_naam;

Hier zijn verschillende functies die we zouden gebruiken in POSIX Semaphore:.

Sem_init

Om een ​​semafoor te initialiseren, moet je de methode sem_init gebruiken. In deze functie komt sem overeen met een geïnitialiseerd semafoorobject. Pshared is een banner of vlag die aangeeft of de semafoor kan worden gedeeld met een forked() procedure of niet. Gedeelde semaforen worden momenteel niet ondersteund door LinuxThreads. De argumentwaarde is de startwaarde waarop de semafoor is vastgezet op.

>> int sem_init(sem_t *sem, int pshared, niet-ondertekende int-waarde);

Sem_wait

We zullen de sem-wait methode gebruiken om een ​​semafoor vast te houden/vergrendelen of te laten wachten. Als de semafoor van een negatieve waarde is voorzien, wordt de belcyclus automatisch geblokkeerd. Telkens wanneer een andere thread sem_post aanroept, ontwaakt een van de reeds verstopte processen.

>> int sem_wait(sem_t *sem);

Sem_post

We zullen de sem_post methode gebruiken om de waarde van een semafoor te verhogen. Bij het aanroepen zal sem_post de waarde verhogen, en een van de reeds verstopte of wachtende processen wordt wakker.

>> int sem_post(sem_t *sem);

Sem_getvalue

Als je de waarde van een semafoor wilt weten, moet je de onderstaande functie sem_getvalue gebruiken. Het zal de huidige waarde van de semafoor verkrijgen en in de valp-puntige bestemming worden geplaatst.

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

Sem_destroy

Je zou de sem_destroy methode moeten gebruiken als je de semafoor wilt vernietigen. Als de ondergang van de semafoor doorgaat, wacht er geen draad in de semafoor.

>> Int sem_destroy(sem_t *sem);

Installeer het GCC-hulpprogramma

Om de POSIX Semaphore C-code te compileren, moet het hulpprogramma gcc op uw Linux-systeem zijn geïnstalleerd. Open hiervoor uw opdrachtterminal en probeer de onderstaande opdracht:.

$ sudo apt-get install gcc

Bevestig je actie door te raken Y.

Implementatie van POSIX Semaphore met C-programmering in Ubuntu

Helemaal aan het begin moet je een nieuw bestand maken met a .cpp-extensie op Ubuntu 20.04 systeem. Hiervoor moet je naar je Home Directory navigeren en een nieuw leeg bestand aanmaken met de naam new.cpp. Je kunt het ook maken met de aanraakopdracht in je opdrachtterminal.

Je kunt zien dat de nieuwe.cpp-bestand is gemaakt in de Home Directory.


Na de oprichting van de .cpp-bestand, open het als een teksteditor in je Linux-systeem en schrijf de onderstaande code in dit bestand zoals het is. Sla het daarna op en sluit het.

Voer het POSIX Semaphore C-programma uit in Ubuntu 20.04

Open uw terminal in Ubuntu 20.04 en voer het onderstaande gcc-commando uit gevolgd door de bestandsnaam.

$ gcc bestandsnaam.c -lpthread -lrt

Er zijn 2 draden gevormd, de ene wordt gevormd na 2 seconden van de andere. Na ontvangst van de bout slaapt de allereerste draad 4 seconden. Dus nadat het is aangeroepen, zou de tweede thread niet direct meedoen, en dit verschijnt 4-2 = 2 seconden nadat het is aangeroepen. Hier is de uitvoer:

Als we geen semafoor hadden gebruikt, volgens contextwisseling, zou het resultaat kunnen zijn zoals wordt opgemerkt:

Conclusie

In deze handleiding wordt een gedetailleerd overzicht gegeven van het gebruik van POSIXSemaphore met C-programmering in Ubuntu 20. Door alleen de POSIX- of Pthread-bibliotheek in bepaalde C-code te gebruiken, kan de POSIX-semafoor vrij eenvoudig worden gebruikt om race-omstandigheden tijdens het coderen te voorkomen.

Hoe de muisaanwijzer en cursorgrootte, kleur en schema op Windows 10 te veranderen
De muisaanwijzer en cursor in Windows 10 zijn zeer belangrijke aspecten van het besturingssysteem. Dit geldt ook voor andere besturingssystemen, dus i...
Gratis en open source game-engines voor het ontwikkelen van Linux-games
Dit artikel behandelt een lijst met gratis en open source game-engines die kunnen worden gebruikt voor het ontwikkelen van 2D- en 3D-games op Linux. E...
Shadow of the Tomb Raider voor Linux-zelfstudie
Shadow of the Tomb Raider is de twaalfde toevoeging aan de Tomb Raider-serie - een actie-avonturengame-franchise gemaakt door Eidos Montreal. De game ...