Předpokládejme, že existuje hlavní vlákno A, jehož úkolem je vypočítat součet proměnných w a y, kde w = x + 1 a y = z + 2. Hodnoty proměnných xaz má uživatel načíst. V tomto scénáři můžeme vytvořit dvě vlákna, B a C. Úkolem vlákna B bude převzít od uživatele hodnotu proměnné x, zvýšit ji o 1 a uložit ji do proměnné w. Úkolem vlákna C bude převzít od uživatele hodnotu proměnné z, zvýšit ji o 2 a poté ji uložit do proměnné y. Nakonec obě tato vlákna předají tyto výsledky hlavnímu vláknu A, které poté vypočítá jejich součet a zobrazí konečný výsledek.
Pokud bychom v tomto scénáři nevytvořili žádná vlákna, pak by všechny úkoly byly provedeny hlavním vláknem A v mnohem větším čase. Tímto způsobem mohou vlákna efektivně provádět vaše výpočty bez zbytečných zpoždění. Existuje však velmi velký problém s používáním vláken, který se označuje jako „rasový stav“. Jedná se o situaci, ve které se dvě vlákna pokoušejí přistupovat a upravovat stejná data, a proto je nechávají nekonzistentní. Jako programátor by naším cílem mělo být vyhnout se závodním podmínkám co nejpůvabnějším způsobem.
Nejčastěji používaným řešením, jak se vyhnout rasovým podmínkám, je použití Mutexu. Mutex znamená vzájemné vyloučení a v zásadě nám poskytuje blokovací mechanismus, který brání přístupu a úpravám důležitých dat více než jedním uživatelem najednou. Tímto způsobem je zajištěna konzistence dat. Posix je v podstatě knihovna, která nám poskytuje různé vestavěné funkce, díky nimž je implementace vláken a Mutexu mnohem jednodušší. V následujícím příkladu se pokusíme naučit použití Posix Mutex s programováním C v Linux Mint 20.
Příklad použití Posix Mutex s programováním C v Linux Mint 20
Provedeme následující tři kroky, které vás provedou používáním Posix Mutex s programováním C v Linux Mint 20.
Krok 1: Vytvoření programu demonstrujícího použití Posix Mutex s programováním C v Linux Mint 20
Nejprve vytvoříme a .cpp soubor v našem systému Linux Mint 20. Jednoduše přejdeme do naší domovské složky, vytvoříme prázdný dokument a pojmenujeme jej Mutex.cpp. Jednou naše .cpp soubor je vytvořen, otevřete jej pomocí textového editoru. Poté zadáme kód zobrazený na obrázcích níže .soubor cpp:
Kód zobrazený na dvou obrázcích výše vytvořil dvě různá vlákna. První vlákno odpovídá Job # 1, zatímco druhé vlákno odpovídá Job # 2. Pak jsme vytvořili ukázkovou funkci s názvem „Funkce Mutex“. V této funkci nejprve zamkneme proměnnou zámku Mutex a odemkne se až poté, co vlákno č. 1 dokončí úlohu č. 1. Podobně bude proměnná zámku Mutex opět uzamčena vláknem # 2, dokud nedokončí úlohu # 2. Tato „funkce Mutex“ se nazývá „hlavní“ funkce.
Krok 2: Kompilace programu C v Linux Mint 20
Po uložení .soubor cpp, nyní jej zkompilujeme prostřednictvím terminálu Linux Mint 20 s následujícím příkazem:
$ gcc -o Mutex Mutex.cpp -pthread
„Mutex“ zde po označení „-o“ odkazuje na název souboru objektů, který bude vytvořen, zatímco „Mutex“.cpp “je název originálu .cpp soubor. Příznak „-pthread“ je nezbytný pro kompilaci tohoto programu, protože tento program je psán při použití knihovny „pthread“. Pokud tento příznak vynecháte, váš program nebude zkompilován a vykreslí některé chyby. Úspěšná kompilace našeho .cpp soubor nebude na terminálu vytvářet žádné zprávy, jak je znázorněno na obrázku níže:
Krok 3: Spuštění programu C v Linux Mint 20
Jakmile bude vytvořen objektový soubor s názvem „Mutex“, můžeme jej spustit pomocí následujícího příkazu:
$ ./ Mutex
Na výstupu našeho Mutexu.Program cpp si všimnete, že byla spuštěna první úloha 1, což znamená, že vlákno č. 1 získalo zámek Mutex. Poté Job 1 po nějaké době končí. Potom se spustí úloha 2, což znamená, že vlákno # 2 získalo zámek Mutex. Odemkne se až po dokončení úlohy 2.
Závěr
Tento článek poskytuje podrobné vysvětlení použití Posix Mutex s programováním C v Linux Mint 20. Mutex lze velmi efektivně použít k vyhnutí se závodním podmínkám při programování jednoduchým zahrnutím knihovny Posix nebo pthread do našeho C kódu. To nejen zajistí konzistenci dat, ale také zefektivní zpracování.
Nejlepší věcí na používání knihovny Posix v systému Linux je, že pro ni nepotřebujeme ani instalovat žádný specializovaný software, balíčky nebo kompilátor. Kód C lze jednoduše napsat v libovolném výchozím textovém editoru v systému Linux a lze jej zkompilovat a spustit pomocí výchozích překladačů gcc nebo g ++. To se ukazuje jako další vrstva snadnosti a pohodlí při používání Posix Mutex s programováním C v Linux Mint 20.