C Programování

POSIX semafory s programováním C

POSIX semafory s programováním C

POSIX odkazuje na přenosné rozhraní OS, což je standard IEEE vyvinutý pro usnadnění přenositelnosti různých aplikací. POSIX je snaha vybudovat společnou standardizovanou verzi systému UNIX prostřednictvím spolupráce prodejců. Usnadnilo by to přenos aplikací mezi hardwarovými platformami, pokud by byly efektivní. Hewlett-Packard integruje POSIX do svého licencovaného MPE / iX OS verze 5.0 a HP / UXX verze 10.0, respektive (jeho UNIX).

Standard POSIX má mnohem více než deset částí, lze však snadno získat dvě. POSIX.1 popisuje programovací rozhraní C (tj.E., knihovna systémových volání) pro soubory, procedury a I / O terminály. Knihovna balíků C POSIX pro platformy POSIX je rámcem standardní knihovny C. Toto je zavedeno ve stejnou dobu jako standardní ANSI C. Aby POSIX vyhovoval standardu C, bylo provedeno několik pokusů. POSIX poskytuje další funkce k těm, které jsou implementovány ve standardu C.

POSIX Semafory

Semafor je datová struktura, která se často používá pro synchronizaci procesů a pomoc vláknům bez jejich vzájemné interakce, aby fungovaly společně. Rozhraní pro semafory je specifikováno standardem POSIX. Není součástí Pthreads. Většina systémů UNIX, které podporují Pthreads, však dokonce poskytuje semafory. V unixových frameworkech, jako je Linux, se semafory slučují s frontami zpráv a společnou pamětí pod službami IPC (Interprocess Communication). Ze starších rámcových V semaforů a moderních POSIX semaforů se stávají dva typy semaforů. Volání semaforu POSIX je mnohem jednodušší než volání semaforu System V. I když je snadné získat semafory System V, zejména na dřívějších platformách podobných Unixu. Je třeba připojit programy pomocí POSIX semaforů ke knihovně Pthread. V tomto článku se podíváme na semafory POSIX.

Proč POSIX Semafory?

Kolem vláken je velký problém, což je „stav závodu“. Jedná se o okolnost, ve které dvě vlákna usilují o získání a změnu stejných informací, čímž jsou v rozporu. Abychom se vyhnuli rasovým podmínkám, používáme semafory velmi dlouho.

Semafory jsou k dispozici ve 2 druzích:

Binární semafor:

Je také rozpoznán jako zámek mutex. Mělo by to jen dvě možné hodnoty, 0 a 1. Hodnota bude inicializována jako 1. Používá se k vynucení mnoha procesů k vyřešení vážného problému se sekcí.

Počítám semafor:

Jeho velikost se může v neomezené doméně lišit. Používá se k získání oprávnění k přístupu k prostředkům mnoha instancí.

Rámec Linux POSIX má integrované úložiště Semaphore. Abychom jej mohli použít, musíme:

Téměř všechny metody a formuláře POSIX Semaphore jsou prototypovány nebo specifikovány v 'Semaphore.h '. Budeme používat Semafor k popisu entity nebo objektu jako:

>> sem_t sem_name;

Zde jsou různé funkce, které bychom používali v POSIX Semaphore.

Sem_init

Chcete-li inicializovat semafor, musíte použít metodu sem_init. V této funkci sem odpovídá inicializovanému semaforovému objektu. Pshared je banner nebo vlajka, která určuje, zda lze semafor sdílet s procedurou forked () nebo ne. Sdílené semafory nejsou v současné době připravovány LinuxThreads. Hodnota argumentu je počáteční hodnota, na kterou je semafor fixován.

>> int sem_init (sem_t * sem, int pshared, hodnota unsigned int);

Sem_wait

K zadržení / uzamčení semaforu nebo jeho vyčkávání použijeme metodu sem-wait. Pokud byl semafor vybaven zápornou hodnotou, bude cyklus volání automaticky zablokován. Kdykoli jiné vlákno zavolá sem_post, probudí se jeden z již ucpaných procesů.

>> int sem_wait (sem_t * sem);

Sem_post

Ke zvýšení hodnoty semaforu použijeme metodu sem_post. Při volání sem_post zvýší hodnotu a probudí se jeden z již ucpaných nebo čekajících procesů.

>> int sem_post (sem_t * sem);

Sem_getvalue

Pokud chcete vědět o hodnotě semaforu, musíte použít níže uvedenou funkci sem_getvalue. Získá současnou hodnotu semaforu a umístí se do cílového bodu s valpou.

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

Sem_destroy

Pokud chcete zničit semafor, měli byste používat metodu sem_destroy. Pokud bude pokračovat demise semaforu, nebude v semaforu čekat žádné vlákno.

>> Int sem_destroy (sem_t * sem);

Nainstalujte si GCC Utility

Chcete-li kompilovat kód POSIX Semaphore C, musíte mít ve svém systému Linux nainstalován obslužný program gcc. Za tímto účelem otevřete příkazový terminál a vyzkoušejte následující příkaz.

$ sudo apt-get install gcc

Potvrďte svou akci úderem Y.

Implementace POSIX semaforu s programováním v C v Ubuntu

Na samém začátku musíte vytvořit nový soubor s a .rozšíření cpp na Ubuntu 20.04 systém. K tomu musíte přejít k domovskému adresáři a vytvořit nový prázdný soubor s názvem nový.cpp. Můžete jej také vytvořit pomocí dotykového příkazu ve vašem příkazovém terminálu.

Vidíte, že nový.cpp soubor byl vytvořen v domovském adresáři.


Po vytvoření .cpp soubor, otevřete jej jako textový editor ve vašem systému Linux a zapište níže uvedený kód do tohoto souboru tak, jak je. Poté to uložte a zavřete.

Spusťte program POSIX Semaphore C v Ubuntu 20.04

Otevřete terminál v Ubuntu 20.04 a proveďte níže uvedený příkaz gcc následovaný názvem souboru.

$ gcc název souboru.c -lpthread -lrt

Jsou vytvořena 2 vlákna, jedno je vytvořeno po 2 sekundách druhého. Po obdržení šroubu první vlákno spí po dobu 4 sekund. Po vyvolání by se tedy druhé vlákno nepřipojilo přímo, a toto se objeví 4-2 = 2 sekundy po vyvolání. Zde je výstup:

Pokud bychom nepoužili semafor, podle přepínání kontextu by mohl být výsledek, jak uvádí:

Závěr

V této příručce byl uveden podrobný přehled o používání POSIXSemaphore s programováním v C v Ubuntu 20. Pouhým použitím knihovny POSIX nebo Pthread v celém určitém kódu C lze POSIX Semaphore docela snadno použít k prevenci rasových podmínek během kódování.

Hry Nejlepší linuxové distribuce pro hraní her v roce 2021
Nejlepší linuxové distribuce pro hraní her v roce 2021
Operační systém Linux má za sebou dlouhou cestu od svého původního, jednoduchého vzhledu založeného na serveru. Tento OS se v posledních letech nesmír...
Hry Jak zachytit a streamovat vaši herní relaci v systému Linux
Jak zachytit a streamovat vaši herní relaci v systému Linux
V minulosti bylo hraní her považováno pouze za koníček, ale postupem času došlo v herním průmyslu k obrovskému nárůstu z hlediska technologie a počtu ...
Hry Nejlepší hry pro ruční sledování
Nejlepší hry pro ruční sledování
Oculus Quest nedávno představil skvělou myšlenku ručního sledování bez ovladačů. S neustále se zvyšujícím počtem her a aktivit, které provádějí podpor...