Programare C

Fir POSIX cu programare C

Fir POSIX cu programare C
Un thread este o instanță mică care rulează în cadrul unui proces. Firele se combină pentru a crea un proces și au unele proprietăți ale procesului; prin urmare, acestea sunt considerate procese ușoare. Firul nu este independent, la fel ca un proces. Mai degrabă lucrează împreună pentru a compila și a crea un proces. Totuși, la fel ca un proces, un fir are și propriul computer (Program Counter) și un anumit registru setat împreună cu spațiul stivei.

Fir POSIX:

În platformele Linux, limbile C și C ++ API pthread standard pentru toate tipurile de funcții legate de fire. Este, de asemenea, cunoscut sub numele de thread POSIX care permite utilizatorilor să creeze mai multe thread-uri pentru ca procesele simultane să curgă. Este cel mai bine utilizat în sisteme multi-core sau procesoare pentru a implementa fire pe kernel pentru a realiza sistemul.

Implementare:

Este necesar să includeți acest pthread.h fișierul antet din script inițial. Acest lucru vă va ajuta în utilizarea funcțiilor bibliotecii pthreads. Pentru a executa fișierul c, următoarele comenzi

$ cc -pthread fișier.c

SAU

$ cc -lpthread fișier.c

Funcțiile care sunt definite în biblioteca pthreads pot include:

pthread_create:

Este folosit pentru a crea un nou thread

Parametrii pthread_create:

Are următorii parametri:

fir: Acesta acționează ca un indicator către o valoare întreagă nesemnată. Returnează ID-ul firului firului care este format.

atribute: Acest parametru acționează ca un indicator către o structură. Acesta este utilizat pentru a defini atributele unui fir care poate fi politica de planificare, și adresa stivei, etc.

start_routine: Acest parametru este un pointer către un subrutină implementat de thread.

argument: Acest parametru este un pointer pentru a anula cu diferite argumente la funcția predefinită la începutul argumentului

Sintaxă:

>> int pthread_create
(pthread_t * thread, const pthread_attributes_t * attr, void * (* start_routine) (void *), void * argument);

pthread_exit:

Este folosit pentru a termina sau termina un fir

Parametrii pthread_exit:

Metoda utilizată la sfârșitul metodei / procesului acceptă un parametru retval care este un indicator obligatoriu pentru un întreg. Stochează starea firului astfel încât firul să se termine. Trebuie să fie o variabilă globală. Acest lucru va permite următorului fir din linie să se alăture firului dacă este disponibil.

Sintaxă:

>> void pthread_exit (void * retval);

pthread_join:

Aceasta este o funcție utilizată în momentul așteptării pentru terminarea firului.

Parametrii pentru pthread_join:

Parametrul folosit aici este:

thread_id: Este ID-ul firului pentru care așteaptă firul în linie.

thread_return: Este parametrul care acționează ca un indicator către locația particulară în care am definit starea de ieșire.

Sintaxă:

>> int pthread_join (pthread_t thread_identification, void ** thread_return);

pthread_self:

Aceasta este o metodă utilizată pentru a obține ID-ul firului în prezent în linie.

Sintaxă:

>> pthread_t pthread_self (nul);

pthread_equal:

Această metodă este utilizată pentru a compara în cazul în care două fire sunt echivalente sau nu. Dacă două fire sunt la fel, atunci funcția va returna o altă valoare decât zero ca răspuns.

Sintaxă:

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

pthread_cancel:

Această metodă este utilizată pentru a trimite o cerere de anulare

Parametru pentru pthread_cancel:

Parametrul utilizat este obligatoriu să fie introdus pentru a anula solicitarea.

Sintaxă:

>> int pthread_cancel (pthread_t threadName);

pthread_detach:

Aceasta este metoda utilizată pentru a separa un fir. Nu are nevoie de niciun fir pentru a se alătura la terminare. Toate resursele care rulează în fir sunt eliberate imediat ce firul este detașat.

Parametrul pthread_detachr:

Este parametrul care acceptă ID-ul firului parametrului obligatoriu. Este obligatoriu să fie detașat.

Sintaxă:

>> int pthread_detach (pthread_t thread);

Cod simplu:

Iată un exemplu de cod pentru a arăta implementarea funcției descrise mai sus. Am folosit un compilator gcc pentru a compila aceste funcții.

// Program pentru a afișa funcțiile firului
#include
#include
#include
// Apelarea firului POSIX, un must-have în sistemele UNIX / LINUX
pthread_t tid [2];
void * Function (void * arg)

nesemnat lung i = 0;
pthread_t id = pthread_self ();
if (pthread_equal (id, tid [0]))
// Condiția ca firele să fie egale

printf ("\ n Primul fir este procesat \ n");

altceva

printf ("\ n Al doilea fir este procesat \ n");

// Fire în curs de procesare.
pentru (i = 0; i<(0x255);i++);
return NULL;

int main (nul)

int i = 0;
eroare int;
// Crearea unui nou thread
in timp ce eu < 2)

eroare = pthread_create (& (tid [i]), NULL, & Function, NULL);
if (eroare != 0)
printf ("\ n Nu s-a putut crea firul: [% s]", strerror (eroare));
altceva
printf ("\ n Firul a fost creat cu succes \ n");
// Fir creat cu succes
i ++;

somn (5);
retur 0;

Codul este scris într-un editor de text; puteți utiliza orice editor în funcție de alegerea dvs. Apoi salvați-l în locația preferată.

Fișierul este salvat în sistemul computerului și apoi este accesat. Fișierul salvat de noi a fost numit test.c. Pentru a-l accesa, tastați următoarea comandă în fereastra terminalului:

$ sudo gcc test.c -lpthread

Apoi, pentru a executa ieșirea, tastați următoarea comandă:

$ ./A.afară

Ieșire preconizată:

Ieșirea pe care am obținut-o ca răspuns la codul anterior este prezentată mai jos:

Concluzie:

Tutorialul a acoperit procesul de bază de creare a firelor și a discutat despre toate metodele utilizate în mod obișnuit în crearea acestuia. Firul este o instanță a unui proces. Apoi am parcurs utilizatorii prin faimoșii parametri utilizați de fiecare proces împreună cu sintaxele, astfel încât aceștia să le poată folosi în programele lor de computer. Aici am împărtășit un exemplu de cod ca exemplu pentru a înțelege mai bine ideea de a crea un program C în POSIX. Compilatorul pe care l-am folosit a fost gcc în sistemul Linux. Utilizatorii pot opta pentru orice alt compilator, pe baza preferințelor lor.

Top 5 cărți de captură a jocului
Cu toții am văzut și ne-au plăcut jocurile de streaming pe YouTube. PewDiePie, Jakesepticye și Markiplier sunt doar câțiva dintre cei mai buni jucător...
Cum să dezvolți un joc pe Linux
Acum un deceniu, nu mulți utilizatori de Linux ar fi prezis că sistemul lor de operare preferat va fi într-o zi o platformă populară de jocuri pentru ...
Open Source Ports of Commercial Game Engines
Free, open source and cross-platform game engine recreations can be used to play old as well as some of the fairly recent game titles. This article wi...