C programozás linux - pthreads stream személyi igazolvány tetrakvark

C programozás linux - pthreads stream személyi igazolvány tetrakvark

Többszálú programozás fontos eszköz a mi korunkban. Ezért úgy döntöttem, hogy szentelje több cikket erre a témára.

A Linux, egy kicsit másképp. A folyamat lényege ugyanaz, mint a Windows - ez egy végrehajtható program az adatokat. De a Linux szál ez egy külön eljárás (a név lehet tekinteni, mint egy „könnyű folyamat», LWP). A különbség ugyanaz - ez a folyamat külön programot a memóriájában, nem lehet közvetlenül hozzáférni a memória a másik folyamat, de a patak, bár egy külön folyamat van hozzáférése a memória a szülő folyamat. [2] LWP folyamatok által létrehozott rendszer hívás klón (), megjelölve a speciális zászlókat.

De van még egy ilyen dolog, amely az úgynevezett «POSIX szálak» - könyvtár a POSIX szabvány, amely rendezi az áramlás (más néven szál) a folyamatban. Azaz itt párhuzamosság belül bekövetkezik egy folyamat.

És akkor felmerül a kérdés a különbségeket „flow” kifejezések „folyamat”, „menet”, stb A probléma az, hogy az angol irodalom ezeket a fogalmakat világosan meghatározott, akkor ugyanaz a mi nagy és hatalmas ellentmondás vezethet vad disszonancia.

De ez mind általánosságban, a részletes információkat kell utalni a szakirodalom, illetve a hivatalos dokumentumokra, akkor olvassa el a man oldalakat. Végén ezt a cikket fogok néhány hasznos linkek, források, ahol több részlet festett minden munkát, és most járunk gyakorolni.

Fogom nézni két változata „párhuzamosítását” - a program létrehozását az áramlás / izzószál funkcióit használni pthread.h (POSIX szálak), vagy hozzon létre egy külön folyamat segítségével a fork ().

Ma úgy véljük, a hullámok a pthread könyvtárban.

kód sablon streaming az alábbiak szerint:

Ahogy a kódfolyamból egység megtestesített funkciót, ebben az esetben, threadFunc. Függvény neve tetszőleges lehet, de a visszatérő jellege és típusa a bemeneti érvek szigorúan be kell void *. Ez a funkció végezhető egy külön végrehajtási szál, ezért szükség van egy különleges óvatossággal végrehajtásához miatt ez a funkció elérhető az azonos memória a szülő folyamat számos patakok. Befejezése érjük el több kiviteli: flow elérte befejezése pontot (visszatérő, pthread_exit (0)), vagy adatfolyam befejeződött kívül.

Létrehozása egy szál folyik a funkció pthread_create (pthread_t * tid, const pthread_attr_t * attr, void * (* funkció) (void *) void * arg), ahol naponta háromszor - a szál azonosítója, attr - áramlási paraméterek (NULL - Default attribútumok részleteket férfi), funkció - egy mutatót a streaming funkció, ebben az esetben threadFunc és arg - pointert a továbbított adatfolyamot.

pthread_join menet függvény egy szál megszüntetésére. A második paraméter a funkció - a kapott eredmény patak.

Próbáljuk ezt a sablont, hogy írjon egy program, amely elvégzi valami hasznos. Például, próbálja, hogy két mátrix, és az eredményt a harmadik a kapott mátrix. Ahhoz, hogy megoldja ezt a problémát már meg kell gondolni a megfelelő adatok eloszlása ​​szálak között. Én végre egy egyszerű algoritmus - hány sort a mátrixban, mint sok szál. Minden egyes folyam hozzáadja elemei az első sorban a mátrix elemei a második sorban a mátrix, és tárolja az eredményt a harmadik sorban a mátrix. Kiderült, hogy minden szál simán fut az adatokkal, és így kizárja hozzáférést egy patak másik adatfolyamot. Példa programok alkalmazásával pthread áramlás a következő:

Az eredmény az OS CentOS 7 a konzol terminál a következő:

C programozás linux - pthreads stream személyi igazolvány tetrakvark

Ahhoz, hogy állítson össze egy programot használ pthread, linker jeleznie kell -lpthread zászló (vagy csatlakoztassa pthread könyvtár a IDE). A csapat összeállítása a gcc így néz ki:

gcc -std = C99 main.c -o main.out -lpthread

gyűjtési rendszerek - teszik

memóriavesztés pthread?

One thought on "C programozás Linux - pthreads folyik"

Szia látogató!


A nevem Vladislav, aki szintén tetrakvark. Én kissé érdekel a programozás, és ne mondd el mindenkinek, hogy mi Érdekelne. Ez az, amit én itt csinálok.
Remélem, élvezni!

Ez minden, amit:

Legutóbbi hozzászólások

Kapcsolódó cikkek