C Programovanie

POSIX semafory s programovaním v jazyku C

POSIX semafory s programovaním v jazyku C

POSIX označuje prenosné rozhranie OS, čo je štandard IEEE vyvinutý na podporu prenosnosti rôznych aplikácií. POSIX je úsilie o vytvorenie spoločnej štandardizovanej verzie systému UNIX prostredníctvom spolupráce dodávateľov. Uľahčilo by to prenos aplikácií medzi hardvérovými platformami, keby boli efektívne. Hewlett-Packard integruje POSIX do svojho licencovaného MPE / iX OS verzie 5.0 a HP / UXX verzia 10.0, v danom poradí (jeho UNIX).

Štandard POSIX má oveľa viac ako desať častí, dve sú však ľahko dostupné. POSIX.1 popisuje programovacie rozhrania C (t.j.e., knižnica systémových volaní) pre súbory, procedúry a I / O terminály. Knižnica balíkov C POSIX pre platformy POSIX je kostrou štandardnej knižnice C. Toto sa ustanovuje súčasne so štandardom ANSI C. Aby bol POSIX kompatibilný so štandardom C, bolo urobených niekoľko pokusov. POSIX poskytuje ďalšie funkcie k tým, ktoré sú implementované v štandarde C.

POSIX Semafory

Semafor je dátová štruktúra, ktorá sa často používa na synchronizáciu procesov a podporu vlákien bez ich vzájomnej interakcie. Rozhranie pre semafory je špecifikované štandardom POSIX. Nie je súčasťou Pthreads. Väčšina systémov UNIX, ktoré podporujú Pthreads, však poskytuje aj semafory. V rámci Unixu, ako je Linux, sú semafory zlúčené so frontami správ a spoločnou pamäťou pod službami IPC (Interprocess Communication). Zo staršieho rámcového V semaforu a moderného POSIX semaforu sa stávajú dva typy semaforov. Volanie semaforov POSIX je oveľa jednoduchšie ako volania semaforov v systéme V. Semafory systému V sa síce dajú ľahšie získať, najmä na starších platformách podobných Unixu. Je potrebné pripájať programy pomocou POSIX semaforov do knižnice Pthread. V tomto článku sa pozrieme na semafory POSIX.

Prečo POSIX Semafory?

Okolo vlákien je veľký problém, ktorý je „závodný stav“. Je to okolnosť, v ktorej sa dve vlákna snažia získať a zmeniť rovnaké informácie, čím sa dostanú do rozporu. Aby sme sa vyhli podmienkam rasy, používame semafory veľmi dlho.

Semafory sú k dispozícii v dvoch druhoch:

Binárny semafor:

Uznáva sa tiež ako zámok mutex. Malo by to len dve možné hodnoty, 0 a 1. Hodnota bude inicializovaná ako 1. Používa sa na vynútenie mnohých procesov na vyriešenie vážneho problému so sekciou.

Počítam semafor:

Jeho veľkosť sa môže v rámci neobmedzenej domény líšiť. Používa sa na získanie oprávnenia na prístup k zdrojom mnohých inštancií.

Rámec Linux POSIX má integrované úložisko Semaphore. Aby sme ho mohli používať, musíme:

Takmer všetky metódy a formy POSIX Semaphore sú prototypy alebo špecifikované v 'Semaphore.h '. Semafor použijeme na opísanie entity alebo objektu ako:

>> sem_t sem_name;

Tu sú rôzne funkcie, ktoré by sme používali v POSIX Semaphore.

Sem_init

Ak chcete inicializovať semafor, musíte použiť metódu sem_init. V tejto funkcii sem zodpovedá inicializovanému semaforovému objektu. Pshared je banner alebo vlajka, ktorá určuje, či je možné semafor zdieľať s procedúrou forked () alebo nie. Zdieľané semafory nie sú v súčasnosti vytvorené vláknami LinuxThreads. Hodnota argumentu je začiatočná hodnota, pri ktorej je semafor fixovaný.

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

Sem_wait

Na zadržanie / uzamknutie semaforu alebo na jeho čakanie použijeme metódu sem-wait. Ak bol semafor vybavený zápornou hodnotou, potom sa volací cyklus automaticky zablokuje. Kedykoľvek iné vlákno zavolá sem_post, prebudí sa jeden z už upchatých procesov.

>> int sem_wait (sem_t * sem);

Sem_post

Na zvýšenie hodnoty semaforu použijeme metódu sem_post. Po zavolaní sem_post zvýši hodnotu a prebudí sa jeden z už upchatých alebo čakajúcich procesov.

>> int sem_post (sem_t * sem);

Sem_getvalue

Ak chcete vedieť o hodnote semaforu, musíte použiť nižšie uvedenú funkciu sem_getvalue. Získa súčasnú hodnotu semaforu a umiestni sa do cieľovej oblasti označenej valp.

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

Sem_destroy

Ak chcete zničiť semafor, mali by ste používať metódu sem_destroy. Ak bude zánik semaforu pokračovať, nebude v semafore čakať žiadne vlákno.

>> Int sem_destroy (sem_t * sem);

Nainštalujte si GCC Utility

Na zostavenie kódu POSIX Semaphore C musíte mať vo svojom systéme Linux nainštalovaný obslužný program gcc. Za týmto účelom otvorte príkazový terminál a vyskúšajte nasledujúci príkaz.

$ sudo apt-get nainštalovať gcc

Potvrďte svoju akciu úderom Y.

Implementácia POSIX Semafor s programovaním C v Ubuntu

Na samom začiatku musíte vytvoriť nový súbor s a .rozšírenie cpp na Ubuntu 20.04 systém. Za týmto účelom musíte prejsť do domovského adresára a vytvoriť nový prázdny súbor s názvom nový.cpp. Môžete ich tiež vytvoriť pomocou dotykového príkazu vo vašom príkazovom termináli.

Vidíte, že nový.cpp súbor bol vytvorený v domovskom adresári.


Po vytvorení .súbor cpp, otvorte ho ako textový editor vo svojom systéme Linux a do tohto súboru napíšte nezmenený kód. Potom to uložte a zatvorte.

Vykonajte program POSIX Semaphore C v Ubuntu 20.04

Otvorte terminál v Ubuntu 20.04 a vykonajte príkaz gcc uvedený nižšie a za ním názov súboru.

$ gcc nazov souboru.c -lpthread -lrt

Vytvorené sú 2 vlákna, jedno sa vytvorí po 2 sekundách druhého. Po prijatí skrutky prvý závit spí na 4 sekundy. Takže po zavolaní by sa druhé vlákno priamo nepripojilo a toto sa objaví 4-2 = 2 sekundy po zavolaní. Tu je výstup:

Keby sme nepoužili semafor, podľa prepínania kontextu by mohol byť výsledok taký, ako uvádza:

Záver

V tejto príručke je uvedený podrobný prehľad o použití POSIXSemaphore s programovaním v C v Ubuntu 20. Pouhé použitie knižnice POSIX alebo Pthread v celom určitom kóde C môže byť POSIX Semaphore celkom ľahko použitý na zabránenie rasovým podmienkam počas kódovania.

Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
Battle for Wesnoth je jednou z najpopulárnejších open source strategických hier, ktoré si v súčasnosti môžete zahrať. Táto hra bola nielen vyvinutá ve...
Hry 0 A.D. Výukový program
0 A.D. Výukový program
Z mnohých strategických hier je tu 0 A.D. dokáže vyniknúť ako komplexný titul a veľmi hlboká, taktická hra napriek tomu, že je otvoreným zdrojom. Vývo...
Hry Výukový program pre Unity3D
Výukový program pre Unity3D
Úvod do Unity 3D Unity 3D je výkonný nástroj na vývoj hier. Je to multiplatforma, ktorá vám umožňuje vytvárať hry pre mobilné telefóny, web, počítače ...