C programozás

POSIX szemaforok C programozással

POSIX szemaforok C programozással

A POSIX az operációs rendszer hordozható interfészére utal, amely IEEE szabvány, amelyet a 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 a UNIX szabványosított verzióját felépítse. Ez megkönnyítené az alkalmazások portálozását a hardverplatformok között, ha azok hatékonyak. A Hewlett-Packard integrálja a POSIX-ot licencelt MPE / iX OS 5. verziójába.0 és a HP / UXX 10. verziója.0, ill. (UNIX).

A POSIX szabványnak jóval több mint tíz része van, azonban kettő könnyen beszerezhető. POSIX.Az 1. ábra C programozási interfészeket ír le (azaz.e., egy rendszerhívási könyvtár) fájlok, eljárások és I / O terminálok számára. A C POSIX csomagkönyvtár a POSIX platformok számára a C szabványos könyvtár kerete. Ez a szabványos ANSI C-vel egy időben jön létre. Ahhoz, hogy a POSIX megfeleljen a C szabványnak, több kísérletet tettek. A POSIX további szolgáltatásokat kínál a C szabványban megvalósítottak mellett.

POSIX szemaforok

A szemafor egy 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 azok kölcsönhatásban lennének egymással. A szemaforok interfészét a POSIX szabvány határozza meg. Nem része a Pthreads-nek. A legtöbb PIXreadot támogató UNIX azonban még szemaforokat is tartalmaz. A Unix-szerű keretrendszerekben, mint a Linux, a szemaforokat egyesítik az üzenetsorokkal és a közös memóriával az Interprocess Communication (IPC) szolgáltatások alatt. A régebbi V keretrendszeri szemaforok és a modern POSIX szemaforok kétféle szemaforává válnak. A POSIX szemafor hívása sokkal könnyebb, mint az V. rendszer szemafor hívása. Bár a System V szemaforjait könnyebb megszerezni, különösen a korábbi Unix-szerű platformokon. Szükség van a POSIX szemaforákat használó programok és a Pthread könyvtár összekapcsolására. Ebben a cikkben megnézzük a POSIX szemaforokat.

Miért POSIX szemaforok?

Nagy probléma van a szálak körül, ami „versenyfeltétel”. Olyan körülmény, amelyben két szál ugyanazon információ megszerzésére és megváltoztatására törekszik, ezáltal ellentmondásossá téve azt. A versenyfeltételek elkerülése érdekében nagyon régóta használunk szemaforokat.

A szemaforok kétféle változatban kaphatók:

Bináris szemafor:

Mutex zárként is felismerik. Csak két lehetséges értéke lenne: 0 és 1. Az érték inicializálása 1 lesz. Számos folyamat végrehajtására használják a komoly szakaszprobléma megoldására.

Szemafor számolása:

Mérete korlátlan tartományonként változhat. Számos példányú erőforrásokhoz való hozzáférés felett felhatalmazással rendelkezik.

A Linux POSIX keretrendszer integrált szemafor tárházával rendelkezik. A használatához:

Szinte az összes POSIX-szemaformódszer és -forma prototípusa vagy meghatározása a 'Szemafor.h '. A szemaforát egy entitás vagy objektum leírására használjuk:

>> sem_t sem_név;

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

Sem_init

A szemafor inicializálásához a sem_init metódust kell használnia. Ebben a függvényben a sem megfelel egy inicializált szemafor objektumnak. A Pshared egy banner vagy flag, amely meghatározza, hogy a szemafor megosztható-e egy forked () eljárással, vagy sem. A megosztott szemaforokat a LinuxThreads jelenleg nem támogatja. Az argumentum értéke az a kiinduló érték, amelynél a szemafor rögzül.

>> int sem_init (sem_t * sem, int pshared, előjel nélküli int érték);

Sem_wait

A sem-wait módszert fogjuk használni egy szemafor megtartására / lezárására vagy várakoztatására. Ha a szemafor negatív értéket kapott, akkor a hívásciklus automatikusan blokkolásra kerül. Amikor bármely más szál meghívja a sem_postot, az egyik már eltömődött folyamat felébred.

>> int sem_wait (sem_t * sem);

Sem_post

A sem_post metódust fogjuk használni a szemafor értékének növeléséhez. Híváskor a sem_post növeli az értéket, és a már eldugult vagy várakozó folyamatok egyike felébred.

>> int sem_post (sem_t * sem);

Sem_getvalue

Ha tudni szeretne egy szemafor értékéről, akkor az alábbi sem_getvalue függvényt kell használnia. Megkapja a szemafor jelenlegi értékét, és a valp-hegyes célpontba kerül.

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

Sem_destroy

A sem_destroy metódust kell használnia, ha el akarja semmisíteni a szemaforot. Ha a szemafor bukása folytatódik, akkor a szemaforban egyetlen szál sem fog várakozni.

>> Int sem_destroy (sem_t * sem);

Telepítse a GCC segédprogramot

A POSIX Semaphore C kód összeállításához telepítenie kell a gcc segédprogramot a Linux rendszerébe. Erre a célra nyissa meg a parancsterminált, és próbálkozzon az alábbi paranccsal.

$ sudo apt-get install gcc

Ütéssel erősítse meg cselekedetét Y.

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

A legelején létre kell hoznia egy új fájlt a-val .cpp kiterjesztés az Ubuntu 20-on.04 rendszer. Ehhez navigálnia kell a saját könyvtárába, és létre kell hoznia egy új, üres nevű fájlt.cpp. Létrehozhatja a parancssori terminál érintőképernyős parancsával is.

Láthatja, hogy az új.A cpp fájl létrejött a saját könyvtárban.


A. Létrehozása után .cpp fájlt, nyissa meg szövegszerkesztőként a Linux rendszerében, és írja be az alábbi kódot ebbe a fájlba úgy, ahogy van. Ezt követően mentse el és zárja be.

Futtassa a POSIX Semaphore C programot az Ubuntu 20-ban.04

Nyissa meg a terminált az Ubuntu 20-ban.04, és hajtsa végre az alábbi gcc parancsot, amelyet a fájlnév követ.

$ gcc fájlnév.c -lpthread -lrt

2 szál van kialakítva, az egyik 2 másodperc múlva jön létre. Miután megkapta a csavart, a legelső menet 4 másodpercig alszik. Tehát, miután meghívták, a második szál nem csatlakozik közvetlenül, és ez 4-2 = 2 másodperccel megjelenik a hívás után. Itt van a kimenet:

Ha nem használtuk volna a szemaforát, a kontextusváltás szerint az eredmény a megfigyelések szerint alakulhatott volna:

Következtetés

Ebben az útmutatóban részletesen áttekintették a POSIXSemaphore és C programozás Ubuntu 20 használatát. A POSIX vagy Pthread könyvtár pusztán bizonyos C-kódok használatával a POSIX szemafor könnyen használható a versenyfeltételek megelőzésére a kódolás során.

SuperTuxKart Linuxhoz
A SuperTuxKart egy nagyszerű cím, amelynek célja, hogy ingyenesen hozza el a Mario Kart élményét Linux rendszerén. Elég kihívást jelentő és szórakozta...
Csata a Wesnoth bemutatóért
A Battle for Wesnoth az egyik legnépszerűbb nyílt forráskódú stratégiai játék, amelyet jelenleg játszhatsz. Ez a játék nem csak nagyon hosszú ideje fe...
0 A.D. Bemutató
A sok stratégiai játék közül 0 A.D. átfogó címként és nagyon mély, taktikus játékként képes kiemelkednie annak ellenére, hogy nyílt forráskódú. A játé...