Tegyük fel, hogy van egy A fő szál, amelynek feladata a w és y változók összegének kiszámítása, ahol w = x + 1 és y = z + 2. Az x és z változók értékeit a felhasználónak be kell töltenie. Ebben a forgatókönyvben két szálat hozhatunk létre, B és C. A B szál feladata az lesz, hogy elvegye a felhasználóból az x változó értékét, 1-gyel növelje és elmentse a w változóba. A C szál feladata az lesz, hogy elvegye a z változó értékét a felhasználótól, növelje 2-vel, majd elmentse az y változóba. Végül mindkét szál átadja ezeket az eredményeket az A fő szálnak, amely ekkor kiszámítja az összegüket és megjeleníti a végeredményt.
Ha ebben a forgatókönyvben nem hoztunk volna létre egyetlen szálat sem, akkor az összes feladatot sokkal nagyobb idő alatt hajtotta volna végre az A fő szál. Ily módon a szálak hatékonyan elvégezhetik a számításokat felesleges késedelem nélkül. A szálak használatával azonban nagyon komoly aggodalom merül fel, amely „versenyfeltételként” ismert. Ez egy olyan helyzet, amikor két szál megpróbálja ugyanahhoz az adathoz hozzáférni és módosítani őket, következetlenül hagyva azokat. Programozóként célunk az kell legyen, hogy a lehető legkecsesebben elkerüljük a versenykörülményeket.
A versenykörülmények elkerülésére leggyakrabban alkalmazott megoldás a Mutex használata. A Mutex a kölcsönös kizárást jelenti, és alapvetően egy olyan zárszerkezetet biztosít számunkra, amely megakadályozza, hogy egyszerre több felhasználó férjen hozzá és módosítsa a kritikus adatokat. Ily módon biztosított az adatok konzisztenciája. A Posix alapvetően egy olyan könyvtár, amely különböző beépített funkciókat mutat be nekünk, amelyek sokkal könnyebbé teszik a szálak és a Mutex megvalósítását. A következő példával megpróbáljuk megtanulni a Posix Mutex használatát C programozással a Linux Mint 20-ban.
Példa a Posix Mutex és C programozás használatára a Linux Mint 20-ban
A következő három lépést fogjuk végigvinni a Posix Mutex C programozással Linux Mint 20-ban.
1. lépés: A Posix Mutex és a C programozás használatát bemutató program létrehozása a Linux Mint 20 alkalmazásban
Először létrehozunk egy .cpp fájl a Linux Mint 20 rendszerünkön. Egyszerűen megyünk a Home mappánkba, létrehozunk egy üres dokumentumot és megnevezzük Mutex-nek.cpp. Egyszer a mi .A cpp fájl létrejön, a szövegszerkesztővel megnyitjuk. Ezt követően beírjuk az alábbi képeken látható kódot .cpp fájl:
A fenti két képen látható kód két különböző szálat hozott létre. Az első szál megfelel az 1. feladatnak, míg a második szál a 2. feladatnak felel meg. Ezután létrehoztunk egy „Mutex Function” nevű függvényt. Ebben a funkcióban először lezárjuk a Mutex lock változót, és csak akkor oldjuk fel, ha az 1. szál befejezi az 1. feladatot. Hasonlóképpen, a Mutex lock változót ismét a 2. szál rögzíti, amíg be nem fejezi a 2. feladatot. Ezt a „Mutex funkciót” a „main” függvény hívja meg.
2. lépés: A C program fordítása Linux Mint 20-ban
A. Mentése után .cpp fájlt, a Linux Mint 20 terminálon keresztül fordítjuk le a következő paranccsal:
$ gcc -o Mutex Mutex.cpp -pszál
Itt a „Mutex” az „-o” jelző után a létrehozandó objektum fájl nevére utal, míg a „Mutex”.cpp ”az eredeti neve .cpp fájl. A program összeállításához a „-pthread” jelző szükséges, mivel a program a „pthread” könyvtár használata közben íródik. Ha ezt a jelzőt kihagyja, a program nem kerül lefordításra, és hibákat okoz. A sikeres összeállítása .A cpp fájl nem hoz létre üzeneteket a terminálon, amint az az alábbi képen látható:
3. lépés: A C program futtatása Linux Mint 20-ban
Miután létrehozta a „Mutex” nevű objektumfájlt, a következő paranccsal futtathatjuk:
$ ./ Mutex
Mutexünk kimenetében.cpp programot, észreveszi, hogy az első Job elindult, ami azt jelenti, hogy az 1. szál megszerezte a Mutex zárat. Ezt követően az 1. Jób idő után befejeződik. Ezután elindul a Job 2, ami azt jelenti, hogy a 2. szál megszerezte a Mutex zárat. Csak akkor oldódik fel, ha a Job 2 befejezi.
Következtetés
Ez a cikk részletesen bemutatta a Posix Mutex és C programozás használatát a Linux Mint 20-ban. A Mutex nagyon hatékonyan használható a versenyfeltételek elkerülésére a programozás során, egyszerűen a Posix vagy a pthread könyvtárat beillesztve a C kódba. Ez nemcsak az adatok konzisztenciáját biztosítja, hanem a feldolgozást is sokkal hatékonyabbá teszi.
A Posix könyvtár Linuxos használatában az a legjobb, hogy nem is kell hozzá speciális szoftvert, csomagot vagy fordítót telepítenünk. A C kód egyszerűen beírható a Linux bármely alapértelmezett szövegszerkesztőjébe, és lefordítható és futtatható az alapértelmezett gcc vagy g ++ fordítókkal. Ez a könnyebb és kényelmesebb rétegnek bizonyul a Posix Mutex C programozásával a Linux Mint 20 alkalmazásban.