gyerekfolyamatok

 ( zero | 2005. május 16., hétfő - 9:51 )

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

hogyan lehet c programbol letrehozni egy szulonek n gyerekfolyamataat
ilyen ketszintu fa szerusegbe.
koszi zero
nagyon fontos (plussz pontert)

fork(), exec()
azert jobban szeretem a parent/child megnevezest... segit a man olvasas kozben :P

koszi
mondjuk ezt en is tudtam es kozben rajottem hogy hogy kell es ez meg volt csak elekadtam mas hol es lajart az ido :cry:
lottek a plusz pontnak
zero

Ha saját függvényt szeretnél gyermekként futtatni (nem egy külső programot), akkor a pthread-del tudod megvalósítani. Most így nem tudom elmondani a paraméterezését (ha jól emlékszem 4 van), de a manban biztos benne van. Meg kell hozzá egy thread változó is, amihez hozzárendeled a fgv-t, majd ezzel birod külön szállra is tenni.
Még annyit, hogy fordításkor meg kell hívnod! pl:
gcc -lpthread -o v v.c

Ha nem megy, gyugodtan szólj vissza, és küldök egy példaprogit

Üdv: S81

[quote:f3054bd72f="stage81"]Ha saját függvényt szeretnél gyermekként futtatni (nem egy külső programot), akkor a pthread-del tudod megvalósítani. [/quote:f3054bd72f]

Remelem azert nem kevered a process/thread(light-weight-process) fogalmat, csak itt fogalmaztal pongyolan...

Pongyolán fogalmaztam volna? Bocsánat érte!
A pthread egy külön programszállat indít el (Legjobb tudomásom szerint, bár azt nem tudom, hogy külön id-t kap-e). Ami mellesleg párhuzamosan képes futni (persze csak virtuálisan, kivéve, ha több procis a géped) az őt meghívó programmal.
És mellette úgy emlékszem, hogy a szálhoz egy függvényt kell rendelni. (Persze ebből a szálból futtatni lehet a program többi függvényét is!) Ha a gyermek szál megszakad (befejeződik), az nem érinti a fő szálat, fordítva viszont a gyermek is "meghal".
Az viszont igaz, hogy lehet process-ként is futtatni, csak a paraméterezésén kell változtatni. (A fő száll nem folytatja a működését, míg a meghívott száll be nem fejeződik)
Remélem most érthető voltam, és nem fogalmaztam pongyolán! (Én sem szeretem, ha valaki olyat ír, ami értelmetlen és kusza)

Üdv:
S81

Csak arra akartam ravilagitani, hogy a multi process es a multi threaded programozas az ket teljesen kulonbozo dolog. Multithreaded esetben 1 processen belul ugyanazon a memorian matat ket kulon vegrahajtasi szal, ami rengeteg (amugy kezelheto: lasd szemaforok, mutexek) problemat behoz a kepbe, es programozoi oldalrol eleg komoly felkeszulest igenyel. Ha fork()-olsz, akkor ket kulon memoriateruletu process jon letre, ahol nincsenek konkurrenciabol adodo problemak (persze ott is lehet shared memory-t hasznalni, meg szemaforokat, de az mar operacios rendszer szintu kepzodmeny, mig thread szinten nem feltetlenul).

[quote:9eca67e339="stage81"]Pongyolán fogalmaztam volna? Bocsánat érte!
A pthread egy külön programszállat indít el (Legjobb tudomásom szerint, bár azt nem tudom, hogy külön id-t kap-e).[/quote:9eca67e339]
Ketfele pthread implementacio van linuxban (amirol en tudok): a linuxthreads es a NPTL. Linuxthreads eseteben tenyleg kap kulon id-t es a ps-vel mint ket jkulon process latszanak a thread-ek, habar ugyanazt az address space-t osztjak.
NPTL csak patchelt 2.4-es vagy alap 2.6-os kernel eseteben van, felteve hogy a libc is ugy volt forgatva. Amint a neveben is benne van (Native Posix Thread Library), ez mar tobb kernel tamogatast kap, igy csak specialis ps parameterezessel lathatoak a thread-ek (process id ugyanaz, de van nekik valami sub-idjuk is). Persze nem ez az egyetlen kulonbseg a ket implementacio kozott. Egy kis google es megvan ;)
[quote:9eca67e339="stage81"]
... Az viszont igaz, hogy lehet process-ként is futtatni, csak a paraméterezésén kell változtatni. (A fő száll nem folytatja a működését, míg a meghívott száll be nem fejeződik)
[/quote:9eca67e339]
Ezt viszont mar nem ertem. A pthread_create fuggveny parameterezesere gondolsz? Mert akkor nagyot tevedsz. pthread_create-el nem tudsz uj process-t letrehozni. Az mas, hogy van olyasmi, hogy pthread_join meg tarsai, amivel meg tudod varni hogy a thread befejezze a mukodeset.

P.S.: A szal az egy "l" :D

Bocsi, igazad van! (Fogalom keveredés :oops: )

Üdv S81