C Programování

Posix Mutex s programováním C

Posix Mutex s programováním C
Dnešní článek bude zaměřen na použití Posix Mutex s programováním C v Linux Mint 20. Než však přejdeme k hlavnímu příkladu, chtěli bychom nejprve vyjasnit několik terminologií, abyste mohli snadno pochopit příklad scénáře, který s vámi sdílíme. V operačních systémech se koncept threading používá velmi často. Vlákna jsou v podstatě dílčí procesy, které jsou delegovány s různými úkoly. V následujícím příkladu můžete pochopit fungování vláken.

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.

V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...
Kurzor při psaní v systému Windows 10 skáče nebo se pohybuje náhodně
Pokud zjistíte, že kurzor myši skáče nebo se pohybuje sám, automaticky, náhodně při psaní v notebooku nebo počítači se systémem Windows, pak vám někte...
Jak obrátit směr posouvání myši a touchpadu ve Windows 10
Myš a Touchpadnejenže usnadňují výpočet, ale jsou efektivnější a méně časově náročné. Nemůžeme si představit život bez těchto zařízení, ale přesto je ...