C Programovanie

Posix Mutex s programovaním v jazyku C

Posix Mutex s programovaním v jazyku C
Dnešný článok bude zameraný na použitie Posix Mutex s programovaním C v Linux Mint 20. Predtým, ako sa presunieme k nášmu hlavnému príkladu, by sme najskôr chceli objasniť niekoľko terminológií, aby ste ľahko pochopili príklad scenára, ktorý s vami budeme zdieľať. V operačných systémoch sa pojem threading hojne používa. Vlákna sú v podstate čiastkové procesy, ktoré sú delegované na rôzne úlohy. Nasledujúci príklad môžete využiť na pochopenie fungovania vlákien.

Predpokladajme, že existuje hlavné vlákno A, ktorého úlohou je vypočítať súčet premenných w a y, kde w = x + 1 a y = z + 2. Hodnoty premenných xaz má načítať užívateľ. V tomto scenári môžeme vytvoriť dve vlákna, B a C. Úlohou vlákna B bude prevziať od používateľa hodnotu premennej x, zvýšiť ju o 1 a uložiť ju do premennej w. Úlohou vlákna C bude prevziať od používateľa hodnotu premennej z, zvýšiť ju o 2 a potom ju uložiť do premennej y. Nakoniec obidve tieto vlákna odovzdajú tieto výsledky do hlavného vlákna A, ktoré potom vypočíta ich súčet a zobrazí konečný výsledok.

Ak by sme v tomto scenári nevytvorili žiadne vlákna, potom by všetky úlohy vykonal hlavný vlák A v oveľa väčšom čase. Týmto spôsobom môžu vlákna efektívne vykonávať vaše výpočty bez zbytočných oneskorení. Avšak existuje veľmi veľká obava z používania vlákien, ktoré sú známe ako „závodné podmienky“. Je to situácia, v ktorej sa dve vlákna snažia získať prístup k rovnakým údajom a upraviť ich, a preto ich nechávajú nekonzistentné. Ako programátor by malo byť našim cieľom vyhnúť sa závodným podmienkam čo najpôvabnejším spôsobom.

Najbežnejšie používaným riešením ako sa vyhnúť pretekovým podmienkam je použitie Mutexu. Mutex znamená vzájomné vylúčenie a v zásade nám poskytuje blokovací mechanizmus, ktorý zabraňuje prístupu a úprave dôležitých údajov viac ako jedným používateľom súčasne. Týmto spôsobom je zabezpečená konzistencia údajov. Posix je v podstate knižnica, ktorá nám poskytuje rôzne vstavané funkcie, ktoré výrazne uľahčujú implementáciu vlákien a Mutexu. Na nasledujúcom príklade sa pokúsime naučiť použitie Posix Mutex s programovaním C v Linux Mint 20.

Príklad použitia programu Posix Mutex s programovaním C v systéme Linux Mint 20

Vykonáme nasledujúce tri kroky, ktoré vás prevedú používaním Posix Mutex s programovaním C v Linux Mint 20.

Krok 1: Vytvorenie programu demonštrujúceho použitie Posix Mutex s programovaním C v Linux Mint 20

Najskôr vytvoríme a .cpp súbor v našom systéme Linux Mint 20. Jednoducho prejdeme do nášho domovského priečinka, vytvoríme prázdny dokument a pomenujeme ho Mutex.cpp. Raz náš .cpp súbor je vytvorený, otvoríme ho textovým editorom. Potom zadáme kód zobrazený na obrázkoch nižšie .cpp súbor:

Kód zobrazený na dvoch obrázkoch vyššie vytvoril dve rôzne vlákna. Prvé vlákno zodpovedá úlohe č. 1, zatiaľ čo druhé vlákno zodpovedá úlohe č. 2. Potom sme vytvorili vzorovú funkciu s názvom „Funkcia Mutex“. V tejto funkcii najskôr uzamkneme premennú zámku Mutex a odomkne sa až potom, čo vlákno č. 1 dokončí úlohu č. 1. Podobne bude premenná zámku Mutex opäť uzamknutá vláknom # 2, kým nedokončí úlohu # 2. Táto „funkcia Mutex“ sa nazýva „hlavná“ funkcia.

Krok 2: Kompilácia programu C v systéme Linux Mint 20

Po uložení .cpp súbor, teraz ho skompilujeme cez terminál Linux Mint 20 s nasledujúcim príkazom:

$ gcc -o Mutex Mutex.cpp -pthread

„Mutex“ tu za príznakom „-o“ označuje názov súboru objektov, ktorý sa vytvorí, zatiaľ čo „Mutex“.cpp “je názov originálu .cpp súbor. Príznak „-pthread“ je potrebný na zostavenie tohto programu, pretože tento program je napísaný pri použití knižnice „pthread“. Ak tento príznak vynecháte, váš program nebude skompilovaný a spôsobí nejaké chyby. Úspešná kompilácia nášho .cpp súbor nebude na termináli vytvárať žiadne správy, ako je to znázornené na obrázku nižšie:

Krok 3: Spustenie programu C v systéme Linux Mint 20

Po vytvorení súboru objektov s názvom „Mutex“ ho môžeme spustiť pomocou nasledujúceho príkazu:

$ ./ Mutex

Na výstupe z nášho Mutexu.cpp program, všimnete si, že sa začala prvá Job 1, čo znamená, že vlákno # 1 získalo zámok Mutex. Potom Job 1 po nejakom čase končí. Potom sa spustí úloha 2, čo znamená, že vlákno # 2 získalo zámok Mutex. Odomkne sa až po dokončení úlohy 2.

Záver

Tento článok priniesol podrobné vysvetlenie použitia Posix Mutex s programovaním C v Linux Mint 20. Mutex je možné veľmi efektívne použiť na zabránenie pretekovým podmienkam pri programovaní jednoduchým zahrnutím knižnice Posix alebo pthread do nášho kódu C. Zabezpečí sa tým nielen konzistencia údajov, ale aj zefektívnenie spracovania.

Najlepšie na použití knižnice Posix v systéme Linux je, že na ňu nepotrebujeme ani inštalovať žiadny špecializovaný softvér, balíky alebo kompilátor. Kód C možno jednoducho napísať do ľubovoľného predvoleného textového editora v systéme Linux a je možné ho kompilovať a spúšťať pomocou predvolených prekladačov gcc alebo g ++. To sa ukazuje ako ďalšia vrstva ľahkosti a pohodlia pri používaní Posix Mutex s programovaním C v Linux Mint 20.

WinMouse vám umožňuje prispôsobiť a vylepšiť pohyb ukazovateľa myši na počítači so systémom Windows
Ak chcete vylepšiť predvolené funkcie kurzora myši, použite freeware WinMouse. Pridáva ďalšie funkcie, ktoré vám pomôžu vyťažiť zo svojej skromnej myš...
Tlačidlo ľavého kliknutia myši nefunguje v systéme Windows 10
Ak používate samostatnú myš s prenosným počítačom alebo stolovým počítačom, ale nefunguje ľavé tlačidlo myši vo Windows 10/8/7 z nejakého dôvodu uvádz...
Kurzor pri písaní v systéme Windows 10 skáče alebo sa pohybuje náhodne
Ak zistíte, že kurzor myši skáče alebo sa pohybuje sám, automaticky a náhodne pri písaní na notebooku alebo počítači so systémom Windows, niektoré z t...