C programozás

POSIX szál C programozással

POSIX szál C programozással
A szál egy folyamaton belül futó kis példány. A szálak együttesen létrehoznak egy folyamatot, és rendelkeznek a folyamat néhány tulajdonságával; ezért könnyű folyamatoknak tekintik őket. A szál nem független, csakúgy, mint egy folyamat. Inkább együtt dolgoznak egy folyamat összeállításában és létrehozásában. Ennek ellenére, csakúgy, mint egy folyamatnak, egy szálnak is megvan a maga PC-je (Program Counter) és egy adott regiszter, a veremterület mellett.

POSIX szál:

Linux platformokon a C és a C ++ nyelv szabványos API-t futtat mindenféle szálhoz kapcsolódó funkcióhoz. POSIX szálként is ismert, amely lehetővé teszi a felhasználók számára, hogy sok szálat hozzanak létre az egyidejű folyamatok áramlásához. Leginkább többmagos rendszerekben vagy processzorokban használható a szálak implementálására a kernelen a rendszer elérése érdekében.

Végrehajtás:

Szükséges ezt a pthreadet felvenni.h fejlécfájl a szkriptben kezdetben. Ez segít a pthreads könyvtár funkcióinak használatában. A c fájl végrehajtásához kövesse az alábbi parancsokat

$ cc -pthread fájl.c

VAGY

$ cc -lpthread fájl.c

A pthreads könyvtárban definiált funkciók a következők lehetnek:

pthread_create:

Új szál létrehozására szolgál

A pthread_create paraméterei:

A következő paraméterekkel rendelkezik:

cérna: Ez az aláíratlan egész érték mutatójaként működik. Visszaadja a kialakult szál szálazonosítóját.

attribútumok: Ez a paraméter mutatóként szolgál egy struktúrára. Egy szál attribútumainak meghatározására szolgál, amelyek lehetnek az ütemezés politikája, és a verem címe stb.

start_routine: Ez a paraméter a szál által végrehajtott alprogramra mutat.

érv: Ez a paraméter az érvénytelenítés mutatója az argumentum elején előre definiált függvénytől eltérő argumentumokkal

Szintaxis:

>> int pthread_create
(pthread_t * szál, const pthread_attributes_t * attr, void * (* start_routine) (void *), void * argumentum);

pthread_exit:

Egy szál befejezésére vagy befejezésére szolgál

A pthread_exit paraméterei:

A metódus / folyamat végén használt módszer elfogadja a paraméter újraváltását, amely egy egész szám kötelező mutatója. A szál állapotát úgy tárolja, hogy a szál véget ér. Globális változónak kell lennie. Ez lehetővé teszi, hogy a sorban következő szál csatlakozzon a szálhoz, ha elérhető.

Szintaxis:

>> void pthread_exit (void * retval);

pthread_join:

Ez egy olyan funkció, amelyet a szál befejezésére való várakozás idején használnak.

A pthread_join paraméterei:

Az itt használt paraméter a következő:

thread_id: Annak a szálnak az azonosítója, amelyre a sorban lévő szál vár.

thread_return: A paraméter az, amely mutatóként szolgál az adott helyre, ahol meghatároztuk a kilépés állapotát.

Szintaxis:

>> int pthread_join (pthread_t thread_identification, érvénytelen ** thread_return);

pthread_self:

Ezt a módszert használják a szál aktuális vonalában lévő azonosító megszerzésére.

Szintaxis:

>> pthread_t pthread_self (érvénytelen);

pthread_equal:

Ezt a módszert használják összehasonlításra abban az esetben, ha két szál egyenértékű vagy sem. Ha két szál egyforma, akkor a függvény válaszként nulla értéket ad vissza.

Szintaxis:

>> int pthread_equal (pthread_t thread1, pthread_t thread2);

pthread_cancel:

Ezt a módszert használják törlési kérelem küldésére

A pthread_cancel paramétere:

A felhasznált paramétert kötelező megadni a kérelem törléséhez.

Szintaxis:

>> int pthread_cancel (pthread_t threadName);

pthread_detach:

Ezt a módszert alkalmazzák egy szál elválasztására. Nincs szüksége semmilyen szálra, hogy csatlakozzon a felmondáshoz. A szálban futó összes erőforrás felszabadul, amint a szál leválik.

A pthread_detachr paramétere:

Ez a paraméter fogadja el a kötelező paraméterlánc azonosítót. Szét kell választani.

Szintaxis:

>> int pthread_detach (pthread_t szál);

Minta kód:

Itt van egy példa kód a fent leírt függvény megvalósításának bemutatására. Ezen funkciók fordításához egy gcc fordítót használtunk.

// Program a szálfüggvények megjelenítésére
#include
#include
#include
// A POSIX szál meghívása, must-have a UNIX / LINUX rendszerekben
pthread_t tid [2];
void * Funkció (void * arg)

előjel nélküli hosszú i = 0;
pthread_t id = pthread_self ();
if (pthread_equal (id, tid [0]))
// A szálak egyenlőségének feltétele

printf ("\ n Az első szál feldolgozása folyamatban van \ n");

más

printf ("\ n A második szál feldolgozása folyamatban van \ n");

// Fonalak feldolgozása folyamatban.
mert (i = 0; i<(0x255);i++);
return NULL;

int main (érvénytelen)

int i = 0;
int hiba;
// Új szál létrehozása
miközben én < 2)

hiba = pthread_create (& (tid [i]), NULL, & Function, NULL);
ha (hiba != 0)
printf ("\ n Nem sikerült létrehozni a szálat: [% s]", strerror (hiba));
más
printf ("\ n A szál sikeresen létrehozva \ n");
// A szál sikeresen létrehozva
i ++;

alvás (5);
visszatér 0;

A kódot szövegszerkesztőben írják; tetszés szerinti szerkesztőt használhat. Ezután mentse el kedvenc helyére.

A fájlt a számítógépes rendszer menti, majd hozzáférhet hozzá. Az általunk mentett fájlt tesztnek nevezték el.c. Hozzáféréshez írja be a következő parancsot a terminál ablakába:

$ sudo gcc teszt.c -lpthread

Ezután írja be a kimenet végrehajtásához a következő parancsot:

$ ./ a.ki

Várható teljesítmény:

Az előző kódra válaszul kapott kimenetet az alábbiakban mutatjuk be:

Következtetés:

Az oktatóanyag a szálkészítés alapvető folyamatát ismertette, és a létrehozás során az összes általánosan használt módszert megtárgyalta. A szál egy folyamat példája. Ezután végigvezettük a felhasználókat az egyes folyamatok által használt híres paramétereken és a szintaxisokon keresztül, hogy azokat felhasználhassák számítógépes programjaikban. Itt példakódot is megosztottunk mintaként, hogy jobban megértsük a C program létrehozásának ötletét a POSIX rendszerben. Az általunk használt fordító a gcc volt a Linux rendszerben. A felhasználók preferenciájuk alapján bármely más fordítót is választhatnak.

Hogyan lehet rögzíteni és streamelni a játékmenetét Linuxon
Korábban a játékokat csak hobbinak tekintették, de az idő múlásával a játékipar hatalmas növekedést ért el a technológia és a játékosok száma szempont...
A legjobb játékok kézi követéssel
Az Oculus Quest nemrégiben bemutatta a vezérlés nélküli kézi követés nagyszerű ötletét. Az egyre növekvő számú játékkal és tevékenységgel, amelyek tám...
Az OSD-fedvény megjelenítése teljes képernyős Linux-alkalmazásokban és játékokban
Teljes képernyős játékok lejátszása vagy alkalmazások figyelemelterelés nélküli, teljes képernyős módban történő használata elvághatja a panelen vagy ...