POSIX szemaforok C programozással

Posix Semaphores With C Programming



A POSIX az operációs rendszer hordozható interfészére utal, amely egy IEEE szabvány, amelyet különböző alkalmazások hordozhatóságának elősegítésére fejlesztettek ki. A POSIX arra törekszik, hogy a gyártók együttműködésével közös szabványos UNIX -verziót hozzon létre. Megkönnyítené az alkalmazások hardverplatformok közötti átvitelét, ha hatékonyak. A Hewlett-Packard integrálja a POSIX-t az engedélyezett MPE/iX OS 5.0 és HP/UXX 10.0 verziójába (UNIX).

A POSIX szabványnak több mint tíz része van, azonban kettő könnyen beszerezhető. A POSIX.1 leírja a C programozási interfészeket (azaz rendszerhívási könyvtárat) fájlokhoz, eljárásokhoz és I/O terminálokhoz. A C POSIX csomagkönyvtár a POSIX platformokhoz a C szabványos könyvtár kerete. Ezt a szabványos ANSI C -vel egy időben állapították meg. A POSIX megfelel a C szabványnak, számos kísérlet történt. A POSIX további funkciókat kínál a C szabványban megvalósítottakhoz.







POSIX szemaforok

A szemafor olyan adatstruktúra, amelyet gyakran használnak a folyamatok szinkronizálására és a szálak segítésére anélkül, hogy kölcsönhatásba lépnének egymással. A szemaforok interfészét a POSIX szabvány határozza meg. Ez nem része a Pthreads -nek. A legtöbb Pthread -et támogató UNIX azonban még szemaforokat is biztosít. A Unix-szerű keretekben, például a Linuxban, a szemaforok egyesülnek az üzenetsorokkal és a közös memóriával az Interprocess Communication (IPC) szolgáltatások alatt. A régebbi V keretrendszer szemaforok és a modern POSIX szemaforok kétféle szemaforrá válnak. A POSIX szemaforhívás sokkal könnyebb, mint a rendszer V. szemafor hívása. Bár a System V szemaforok könnyebben beszerezhetők, különösen a korábbi Unix-szerű platformokon. Szükség van a POSIX szemaforokat használó programok csatlakoztatására a Pthread könyvtárhoz. Ebben a cikkben megvizsgáljuk a POSIX szemaforokat.



Miért a POSIX szemaforok?

A szálak körül nagy probléma van, ez a verseny állapota. Ez egy olyan körülmény, amikor két szál ugyanazt az információt kívánja megszerezni és megváltoztatni, ezáltal ellentmondásba hozva azt. A versenyhelyzet elkerülése érdekében nagyon régóta használunk szemaforokat.



A szemaforok 2 típusban kaphatók:





Bináris szemafor :

Mutex zárként is felismerik. Csak két lehetséges értéke lenne, a 0 és az 1. Az érték az 1. lesz.



A szemafor számlálása :

Mérete korlátlan tartományonként változhat. Arra használják, hogy felhatalmazással rendelkezzen a számos példányos erőforráshoz való hozzáférés felett.

A Linux POSIX keretrendszer integrált Szemafor tárolóval rendelkezik. Használatához a következőkre van szükségünk:

  • Szemafor hozzáadása.h
  • Gyűjtse össze a kódot a -lpthread -lrt segítségével.

Szinte minden POSIX szemafor módszer és forma prototípusos vagy a „Semaphore.h”. A Szemafor segítségével leírjuk az entitást vagy objektumot:

>>sem_t sem_name;

Itt vannak különböző funkciók, amelyeket a POSIX Szemaforában használnánk.

Sem_init

A szemafor inicializálásához a sem_init metódust kell használni. Ebben a függvényben a sem egy inicializált szemafor objektumnak felel meg. A Pshared egy banner vagy zászló, amely meghatározza, hogy a szemafor megosztható -e egy villás () eljárással vagy sem. A megosztott szemaforokat a LinuxThreads jelenleg nem támogatja. Az argumentumérték az a kiindulási érték, amelyhez a szemafor rögzítve van.

>> intsem_init(sem_t*szem, intpshared, aláírás nélküli intérték);

Sem_wait

A szemafor módszert fogjuk használni a szemafor tartásához/zárolásához vagy várakozáshoz. Ha a szemafor negatív értékkel rendelkezik, akkor a hívási ciklus automatikusan blokkolódik. Amikor bármely más szál meghívja a sem_post -ot, az egyik már eltömődött folyamat felébred.

>> intsem_wait(sem_t*szem);

Sem_post

A sem_post metódust használjuk a szemafor értékének növelésére. Híváskor a sem_post növeli az értéket, és a már eltömődött vagy várakozó folyamatok egyike felébred.

>> intsem_post(sem_t*szem);

Sem_getvalue

Ha szeretne tudni a szemafor értékéről, akkor használja az alábbi sem_getvalue függvényt. Megkapja a szemafor jelenértékét, és a szelep hegyes célállomásra kerül.

>>Int sem_getvalue(sem_t*szem, int *kölyökkutya);

Sem_destroy

A sem_destroy metódust kell használnia, ha el akarja pusztítani a szemaforot. Ha a szemafor pusztulása folytatódni fog, a szemaforban egyetlen szál sem vár.

>>Int sem_destroy(sem_t*szem);

Telepítse a GCC segédprogramot

A POSIX Semaphore C kód fordításához a gcc segédprogramnak telepítve kell lennie a Linux rendszerben. Ebből a célból nyissa meg a parancsterminált, és próbálja ki az alábbi parancsot.

$sudo apt-get install gcc

Erősítse meg tevékenységét ütéssel ÉS .

POSIX Szemafor megvalósítása C programozással az Ubuntuban

A legelején létre kell hoznia egy új fájlt .cpp kiterjesztéssel az Ubuntu 20.04 rendszeren. Ehhez navigálnia kell a Home Directory felé, és létre kell hoznia egy új üres fájlt new.cpp néven. A parancsterminál érintőképernyő parancsával is létrehozható.

Láthatja, hogy az új.cpp fájl létrejött a Home Directoryban.


A .cpp fájl létrehozása után nyissa meg azt szövegszerkesztőként a Linux rendszerében, és írja be az alábbi kódot ebbe a fájlba. Ezután mentse el és zárja be.

Futtassa a POSIX Semaphore C programot az Ubuntu 20.04 -ben

Nyissa meg a terminált Az Ubuntu 20.04 -ben, és hajtsa végre az alábbi gcc parancsot, majd a fájlnevet.

$gccfájlnév.c –mélység –lrt

2 szál van kialakítva, az egyik 2 másodperc után jön létre. A csavar kézhezvétele után a legelső menet 4 másodpercig alszik. Tehát a hívás után a második szál nem csatlakozik közvetlenül, és ez 4-2 = 2 másodperccel a hívás után jelenik meg. Itt a kimenet:

Ha nem használtuk volna a szemaforot, a kontextusváltás szerint az eredmény a következőképpen alakulhatott:

Következtetés

Ebben az útmutatóban részletes áttekintést kaptunk a POSIXSemaphore és a C programozás Ubuntu 20 alkalmazásáról. Ha pusztán a POSIX vagy a Pthread könyvtárat használja bizonyos C kódokban, a POSIX szemafor könnyen használható a versenykörülmények megelőzésére a kódolás során.